カーソルを宣言します。
Synopsis
DECLARE cursor-name CURSOR FOR query 
      FOR READ ONLY

DECLARE cursor-name CURSOR FOR query 
      FOR UPDATE
引数
cursor-name カーソルの名前。識別子です。
query カーソルの結果セットを定義する標準 SELECT 文。
FOR READ ONLY オプション — このカーソルによって行われる更新を防ぎます。カーソルは UPDATE、または DELETE 文の WHERE CURRENT OF 句では参照できません。
FOR UPDATE オプション — 既定の動作ではカーソルを使用した更新ができます。FOR UPDATE を明示的に指定するのは、互換性のためだけです。指定によって処理が実行されるわけではありません。
概要
DECLARE 文はカーソルに関する情報を指定し、後続の OPEN 文で使用されます。
既定では、更新はカーソルを使用して実行できます。FOR READ ONLY を指定した場合、クエリで ORDER BY 文を使用して順番を指定した場合、またはそれ以外でクエリが更新用になっていない場合は、カーソルを使用した更新はできません。
SQL 文として、DECLARE は埋め込み SQL からのみサポートされます。ダイナミック SQL の場合は、代わりに単純な SELECT 文 (INTO 節のないもの) を使用するか、ダイナミック SQL と埋め込み SQL の組み合わせを使用します。同様の操作は、ODBC でも ODBC API を使用してサポートされます。
以下の埋め込み SQL は、EmpCursor という名前のカーソルを宣言して、オープン、フェッチ、クローズする例です。
   SET name="John Doe",state="##"
   &sql(DECLARE EmpCursor CURSOR FOR SELECT Name, Home_State
       INTO :name,:state FROM Sample.Person
       FOR READ ONLY)
   IF SQLCODE'=0 {
     WRITE !,"DECLARE Error code ",SQLCODE
     QUIT }
   ELSE {
     WRITE !,"BEFORE: Name=",name," State=",state }
   &sql(OPEN EmpCursor)
   FOR { &sql(FETCH EmpCursor)
        QUIT:SQLCODE  
        WRITE !,"DURING: Name=",name," State=",state }
   &sql(CLOSE EmpCursor)
   WRITE !,"AFTER: Name=",name," State=",state
以下の埋め込み SQL の例は、DECLARE を使用して、郵便番号が EmpZipCode 変数の値と同じである全従業員の姓と名を含むようにカーソル EmpCursor を設定します。
   NEW EmpLast,EmpFirst,EmpZipCode
    &sql(DECLARE EmpCursor CURSOR FOR
     SELECT LastName,FirstName
     INTO :EmpLast,:EmpFirst
     FROM EmpTable where ZipCode = :EmpZipCode)
   IF SQLCODE'=0 {
     WRITE !,"DECLARE Error code ",SQLCODE
     QUIT }
   ELSE {
     SET EmpZipCode="02142" }
      &sql(OPEN EmpCursor)
   IF (SQLCODE) {
     WRITE SQLCODE,!
     QUIT
     }
  SET SQLCODE = 0
  WHILE (SQLCODE = 0) {
   &sql(FETCH EmpCursor)
   WRITE !,EmpLast," ",EmpFirst
  }
  &sql(CLOSE EmpCursor)
  QUIT
関連項目
CLOSE カーソル FETCH OPEN WHERE CURRENT OF