機能
動的カーソル宣言またはALLOCATE CURSOR文で指定したカーソルによって位置づけられた1行を更新します。
記述形式

参照項番
値式 → “2.11 値式”
権限
動的UPDATE文:位置づけを実行できるのは、処理対象の表のUPDATE権の保持者です。
一般規則
カーソル名または拡張カーソル名以外の規則は、“3.66 UPDATE文:位置づけ”の一般規則を参照してください。
カーソルの名前を指定します。
動的カーソル宣言で定義したカーソルを更新する場合は、カーソル名を指定します。
ALLOCATE CURSOR文で定義したカーソルを更新する場合は、拡張カーソル名を指定し、拡張カーソル名の値にカーソルの名前を指定します。
拡張カーソル名は、文字列型の埋込み変数で指定します。拡張カーソル名の値に空白を含む場合は、前後の空白を取り除いた値がカーソルの名前になります。
カーソル名を指定した場合、カーソル名は、同一コンパイル単位に含まれる動的カーソル宣言で定義されていることが必要です。
カーソル名と拡張カーソル名の値が同じでも、異なるカーソルとして区別されます。
使用例
CU1のカーソルで位置づけられた行を更新します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR CMDAREA[100];
EXEC SQL END DECLARE SECTION;
:
EXEC SQL ALLOCATE DESCRIPTOR 'DESC1' WITH MAX 50; (1)
EXEC SQL DECLARE CU1 CURSOR FOR CMD; (2)
strcpy(CMDAREA.sqlvar,"SELECT COL1,COL2 FROM S1.TBL WHERE COL4 = 38"); (3)
CMDAREA.sqllen = strlen(CMDAREA.sqlvar);
EXEC SQL PREPARE CMD FROM :CMDAREA; (4)
EXEC SQL DESCRIBE OUTPUT CMD USING SQL DESCRIPTOR 'DESC1'; (5)
:
(SQL記述子域に必要な情報を設定)
:
EXEC SQL OPEN CU1; (6)
EXEC SQL FETCH CU1 INTO SQL DESCRIPTOR 'DESC1'; (7)
EXEC SQL UPDATE S1.TBL SET COL1 = 10,COL2 = 20 WHERE CURRENT OF CU1; (8)
EXEC SQL CLOSE CU1; (9)(1) 記述子名DESC1のSQL記述子域を割り当てます。
(2) 動的カーソル宣言によりCU1のカーソルを宣言します。
(3) ホスト変数CMDAREAに動的SELECT文を設定します。
(4) ホスト変数CMDAREAが示すSQL文をSQL文識別子CMDに対応づけます。
(5) SQL文識別子CMDに対応する被準備文の選択リストの情報を記述子名DESC1のSQL記述子域に取り込みます。
(6) 動的OPEN文によりカーソルをオープンします。
(7) 動的FETCH文により記述子名DESC1のSQL記述子域に実行結果を取り込みます。
(8) 動的UPDATE文:位置づけにより位置づけ行を更新します。
(9) 動的CLOSE文によりカーソルをクローズします。
拡張カーソル名を指定した場合の例を示します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。
EXEC SQL BEGIN DECLARE SECTION;
CHAR CURVAR[4];
CHAR CMDVAR[4];
VARCHAR CMDAREA[100];
EXEC SQL END DECLARE SECTION;
:
EXEC SQL ALLOCATE DESCRIPTOR 'DESC1' WITH MAX 50; (1)
strcpy(CURVAR,"CU1"); (2)
strcpy(CMDVAR,"CMD"); (3)
strcpy(CMDAREA.sqlvar,"SELECT COL1,COL2 FROM S1.TBL WHERE COL4 = 38"); (4)
CMDAREA.sqllen = strlen(CMDAREA.sqlvar);
EXEC SQL PREPARE :CMDVAR FROM :CMDAREA; (5)
EXEC SQL ALLOCATE :CURVAR CURSOR FOR :CMDVAR; (6)
EXEC SQL DESCRIBE OUTPUT :CMDVAR USING SQL DESCRIPTOR 'DESC1'; (7)
:
(SQL記述子域に必要な情報を設定)
:
EXEC SQL OPEN :CURVAR; (8)
EXEC SQL FETCH :CURVAR INTO SQL DESCRIPTOR 'DESC1'; (9)
EXEC SQL UPDATE S1.TBL SET COL1 = 10,COL2 = 20 WHERE CURRENT OF :CURVAR; (10)
EXEC SQL CLOSE :CURVAR; (11)(1) 記述子名DESC1のSQL記述子域を割り当てます。
(2) ホスト変数CURVARにカーソルの名前CU1を設定します。
(3) ホスト変数CMDVARに被準備文の名前CMDを設定します。
(4) ホスト変数CMDAREAに動的SELECT文を設定します。
(5) ホスト変数CMDAREAが示すSQL文を拡張SQL文識別子CMDVARの値CMDに対応づけます。
(6) 拡張カーソル名CURVARの値CU1と拡張SQL文識別子CMDVARの値CMDを対応づけます。
(7) 拡張SQL文識別子CMDVARの値CMDに対応する被準備文の選択リストの情報を記述子名DESC1のSQL記述子域に取り込みます。
(8) 動的OPEN文によりカーソルをオープンします。
(9) 動的FETCH文により記述子名DESC1のSQL記述子域に実行結果を取り込みます。
(10) 動的UPDATE文:位置づけにより位置づけ行を更新します。
(11) 動的CLOSE文によりカーソルをクローズします。