>>---EXEC SQL--.------------.------DECLARE cursor_name---->
+-AT db_name-+
>---CURSOR FOR------SELECT DISTINCT------select_list------>
>---FROM----table_list--.-----------------2--END-EXEC----><
+-select_options--+
| db_name | DECLARE DATABASE を使用して宣言されているデータベースの名前。 |
| cursor_name | 以後の文でカーソルを示すために使用されるカーソル名。 カーソル名には、ファイル名に使用できる文字を指定できます。また、カーソル名は 30 文字以内で指定します。 最初の文字は数字以外の文字にする必要があります。 |
| select_list | 検索する列の名前。 |
| table_list | select_list で指定した検索対象となる列を含むテーブルの名前。 |
| select_options | 検索する行数または検索する行の順序 (またはその両方) を制限するためのオプション。 |
DECLARE CURSOR 文によりカーソル名を SELECT DISTINCT 文に関連付け、FETCH 文を使用してデータ行を検索することができます。
別々にコンパイルした 2 つのプログラムでは、同じカーソルを共有できません。 特定のカーソルを参照するすべての文は、すべて同時にコンパイルする必要があります。
SELECT DISTINCT 文は、カーソルが開くときに実行されます。 SELECT DISTINCT 文には次の規則が適用されます。
注: 行セットにある重複行を削除するには、SELECT INTO ではなく SELECT DISTINCT を使用します。
01 age-array pic s9(09) comp-5 occurs 10 times.
01 lname-array pic x(32) occurs 10 times.
MOVE 5 TO staff-id
EXEC SQL
SELECT DISTINCT last_name
INTO :lname-array
FROM staff
WHERE staff_id > :staff-id
END-EXEC
EXEC SQL
SELECT DISTINCT age
INTO :age-array
FROM staff
WHERE first_name > 'George'
END-EXEC