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

4.9 DELETE文(動的DELETE文:位置づけ)

機能

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

記述形式

権限

一般規則

カーソル名または拡張カーソル名
  • カーソルの名前を指定します。

  • 動的カーソル宣言で定義したカーソルの行を削除する場合は、カーソル名を指定します。

  • ALLOCATE CURSOR文で定義したカーソルの行を削除する場合は、拡張カーソル名を指定し、拡張カーソル名の値にカーソルの名前を指定します。

  • 拡張カーソル名は、文字列型の埋込み変数で指定します。拡張カーソル名の値に空白を含む場合は、前後の空白を取り除いた値がカーソルの名前になります。

  • カーソル名を指定した場合、カーソル名は、同一コンパイル単位に含まれる動的カーソル宣言で定義されていることが必要です。

  • カーソル名と拡張カーソル名の値が同じでも、異なるカーソルとして区別されます。

使用例

例1

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,COL3 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 DELETE FROM S1.TBL 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) 動的DELETE文:位置づけにより位置づけ行を削除します。

(9) 動的CLOSE文によりカーソルをクローズします。

例2

拡張カーソル名を指定した場合の例を示します。なお、可変長文字型の展開規則は、“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 DELETE FROM S1.TBL 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) 動的DELETE文:位置づけにより位置づけ行を削除します。

(11) 動的CLOSE文によりカーソルをクローズします。