カーソルは、使用する前に宣言されている必要があります。それには DECLARE CURSOR 文が使用され、そこにカーソルの名前と SELECT 文、または準備された SELECT 文の名前を指定します。
カーソル名は、接続するデータベースの識別子に対する規則に準拠する必要があります。例えば、識別子にハイフンを使用できないデータベースでは、カーソル名にもハイフンを使用できません。
EXEC SQL DECLARE Cur1 CURSOR FOR SELECT first_name FROM employee WHERE last_name = :last-name END-EXEC
この例では、入力ホスト変数 (:last-name) を使用して SELECT 文を指定しています。カーソルの OPEN 文が実行されると、入力ホスト変数の値が読み込まれ、SELECT 文が実行されます。
EXEC SQL DECLARE Cur2 CURSOR FOR stmt1 END-EXEC . . . move "SELECT first_name FROM emp " & "WHERE last_name=?" to prep. EXEC SQL PREPARE stmt1 FROM :prep END-EXEC . . . EXEC SQL OPEN Cur2 USING :last-name END-EXEC
この例では、DECLARE CURSOR 文が PREPARE 文で定義した文 (stmt1) を参照しています。準備された SELECT 文には疑問符 (?) を含めることが可能であり、それはカーソルが開かれるときに、必要なデータが供給されるよう指示するパラメーター マーカーとして機能します。カーソルは、文が準備される前に宣言されている必要があります。
オブジェクト指向 (OO) プログラムでは、データ項目を宣言することが許されている場所であればどこにでも、カーソルを宣言することができます。カーソルは、開かれるカーソルを含むオブジェクトにとってはローカルになるため、同一オブジェクトの 2 つのインスタンスが「同じ」カーソルを開いたとしても、それぞれが別のカーソルのインスタンスを得ることになります。カーソルをあるメソッドでオープンし、第 2 のメソッドで取り込み、第 3 のメソッドでクローズできますが、その場合には、カーソルをオブジェクト場所節で宣言する必要があります。
COBSQL
カーソルは、プログラムのデータ部または手続き部のどちらかで宣言できます。DECLARE CURSOR 文はコードを生成しませんが、カーソルが手続き部で宣言された場合には、COBSQL は DECLARE CURSOR 文に対してデバッグ ブレークポイントを生成します。