機能
動的カーソル宣言またはALLOCATE CURSOR文で指定したカーソルによって位置づけられた1行を更新します。
記述形式
参照項番
区切り識別子 → “2.1.3 トークン”
値式 → “2.10 値式”
権限
準備可能動的UPDATE文:位置づけを実行できるのは、処理対象の表のUPDATE権の保持者です。
一般規則
準備可能動的UPDATE文:位置づけは、このSQL文をホスト変数に格納し、PREPARE文で実行の準備を行った後、EXECUTE文により実行します。また、このSQL文をホスト変数に格納した後、EXECUTE IMMEDIATE文で実行します。埋込みSQL文として、実行することはできません。必ず、準備してから実行する必要があります。
表名、カーソル名および上記以外の規則は、“3.66 UPDATE文:位置づけ”を参照してください。
更新する表の名前を指定します。
表名を省略した場合、対象の表は、カーソルに対応する被準備文の内容である動的SELECT文のFROM句で指定された表になります。
動的カーソル宣言で定義したカーソル名、またはALLOCATE CURSOR文の拡張カーソル名で定義したカーソルの名前を指定します。
カーソル名に英字の小文字を指定した場合、対応する英字の大文字に変換されます。英字の大文字と小文字を区別する場合は、区切り識別子で指定します。詳細は、“2.1.3 トークン”を参照してください。
準備可能動的UPDATE文:位置づけに指定したカーソル名は、以下のいずれかと同じであることが必要です。ただし、両方と同じである場合は、例外(あいまいなカーソル名)となります。
同一コンパイル単位に含まれる動的カーソル宣言のカーソル名
同一セションで実行されたALLOCATE CURSOR文の拡張カーソル名の値
使用例
CU1のカーソルで位置づけられた行を更新します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。
EXEC SQL BEGIN DECLARE SECTION; VARCHAR CMDAREA1[100]; VARCHAR CMDAREA2[100]; EXEC SQL END DECLARE SECTION; : EXEC SQL ALLOCATE DESCRIPTOR 'DESC1' WITH MAX 50; (1) EXEC SQL DECLARE CU1 CURSOR FOR CMD1; (2) strcpy(CMDAREA1.sqlvar,"SELECT COL1,COL2 FROM S1.TBL WHERE COL4 = 38"); (3) CMDAREA1.sqllen = strlen(CMDAREA1.sqlvar); strcpy(CMDAREA2.sqlvar,"UPDATE S1.TBL SET T1 = 10 WHERE CURRENT OF CU1"); (4) CMDAREA2.sqllen = strlen(CMDAREA2.sqlvar); EXEC SQL PREPARE CMD1 FROM :CMDAREA1; (5) EXEC SQL DESCRIBE OUTPUT CMD1 USING SQL DESCRIPTOR 'DESC1'; (6) : (SQL記述子域に必要な情報を設定) : EXEC SQL OPEN CU1; (7) EXEC SQL PREPARE CMD2 FROM :CMDAREA2; (8) EXEC SQL FETCH CU1 INTO SQL DESCRIPTOR 'DESC1'; (9) EXEC SQL EXECUTE CMD2; (10) EXEC SQL CLOSE CU1; (11)
(1) 記述子名DESC1のSQL記述子域を割り当てます。
(2) 動的カーソル宣言によりCU1のカーソルを宣言します。
(3) ホスト変数CMDAREA1に動的SELECT文を設定します。
(4) ホスト変数CMDAREA2に準備可能動的UPDATE文:位置づけを設定します。
(5) ホスト変数CMDAREA1が示すSQL文をSQL文識別子CMD1に対応づけます。
(6) SQL文識別子CMD1に対応する被準備文の選択リストの情報を記述子名DESC1のSQL記述子域に取り込みます。
(7) 動的OPEN文によりカーソルをオープンします。
(8) ホスト変数CMDAREA2が示すSQL文をSQL文識別子CMD2に対応づけます。
(9) 動的FETCH文により記述子名DESC1のSQL記述子域に実行結果を取り込みます。
(10) 準備可能動的UPDATE文:位置づけにより位置づけ行を更新します。
(11) 動的CLOSE文によりカーソルをクローズします。
拡張カーソル名を指定した場合の例を示します。なお、可変長文字型の展開規則は、“6.3 SQL埋込みCプログラム”を参照してください。
EXEC SQL BEGIN DECLARE SECTION; CHAR CURVAR[4]; CHAR CMDVAR1[5]; CHAR CMDVAR2[5]; VARCHAR CMDAREA1[100]; VARCHAR CMDAREA2[100]; EXEC SQL END DECLARE SECTION; : EXEC SQL ALLOCATE DESCRIPTOR 'DESC1' WITH MAX 50; (1) strcpy(CURVAR,"CU1"); (2) strcpy(CMDVAR1,"CMD1"); (3) strcpy(CMDVAR2,"CMD2"); (4) strcpy(CMDAREA1.sqlvar,"SELECT COL1,COL2 FROM S1.TBL WHERE COL4 = 38"); (5) CMDAREA1.sqllen = strlen(CMDAREA1.sqlvar); strcpy(CMDAREA2.sqlvar,"UPDATE S1.TBL SET T1 = 10 WHERE CURRENT OF CU1");(6) CMDAREA2.sqllen = strlen(CMDAREA2.sqlvar); EXEC SQL PREPARE :CMDVAR1 FROM :CMDAREA1; (7) EXEC SQL ALLOCATE :CURVAR CURSOR FOR :CMDVAR1; (8) EXEC SQL DESCRIBE OUTPUT :CMDVAR1 USING SQL DESCRIPTOR 'DESC1'; (9) : (SQL記述子域に必要な情報を設定) : EXEC SQL OPEN :CURVAR; (10) EXEC SQL PREPARE :CMDVAR2 FROM :CMDAREA2; (11) EXEC SQL FETCH :CURVAR INTO SQL DESCRIPTOR 'DESC1'; (12) EXEC SQL EXECUTE :CMDVAR2; (13) EXEC SQL CLOSE :CURVAR; (14)
(1) 記述子名DESC1のSQL記述子域を割り当てます。
(2) ホスト変数CURVAR1にカーソルの名前CU1を設定します。
(3) ホスト変数CMDVAR1に被準備文(動的SELECT文)の名前CMD1を設定します。
(4) ホスト変数CMDVAR2に被準備文(準備可能動的UPDATE文:位置づけ)の名前CMD2を設定します。
(5) ホスト変数CMDAREA1に動的SELECT文を設定します。
(6) ホスト変数CMDAREA2に準備可能動的UPDATE文:位置づけを設定します。
(7) ホスト変数CMDAREA1が示すSQL文を拡張SQL文識別子CMDVAR1の値CMD1に対応づけます。
(8) 拡張カーソル名CURVAR1の値CU1と拡張SQL文識別子CMDVAR1の値CMD1を対応づけます。
(9) 拡張SQL文識別子CMDVAR1の値CMD1に対応する被準備文の選択リストの情報を記述子名DESC1のSQL記述子域に取り込みます。
(10) 動的OPEN文によりカーソルをオープンします。
(11) ホスト変数CMDAREA2が示すSQL文を拡張SQL文識別子CMDVAR2の値CMD2に対応づけます。
(12) 動的FETCH文により記述子名DESC1のSQL記述子域に実行結果を取り込みます。
(13) 準備可能動的UPDATE文:位置づけにより位置づけ行を更新します。
(14) 動的CLOSE文によりカーソルをクローズします。