ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

4.18 UPDATE文(準備可能動的UPDATE文:位置づけ)

機能

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

記述形式

参照項番

権限

一般規則

表名
  • 更新する表の名前を指定します。

  • 表名を省略した場合、対象の表は、カーソルに対応する被準備文の内容である動的SELECT文のFROM句で指定された表になります。

カーソル名
  • 動的カーソル宣言で定義したカーソル名、またはALLOCATE CURSOR文の拡張カーソル名で定義したカーソルの名前を指定します。

  • カーソル名に英字の小文字を指定した場合、対応する英字の大文字に変換されます。英字の大文字と小文字を区別する場合は、区切り識別子で指定します。詳細は、“2.1.3 トークン”を参照してください。

  • 準備可能動的UPDATE文:位置づけに指定したカーソル名は、以下のいずれかと同じであることが必要です。ただし、両方と同じである場合は、例外(あいまいなカーソル名)となります。

    • 同一コンパイル単位に含まれる動的カーソル宣言のカーソル名

    • 同一セションで実行されたALLOCATE CURSOR文の拡張カーソル名の値

使用例

例1

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文によりカーソルをクローズします。

例2

拡張カーソル名を指定した場合の例を示します。なお、可変長文字型の展開規則は、“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文によりカーソルをクローズします。