[[FrontPage]]へ~
-[[リファレンスガイド]]へ~
--[[Firebird SQLリファレンス]]へ~
&br;
----
*Firebird SQL リファレンス:INSERT/UPDATE/DELETE [#r53e095a]

#contents

----
&br;
&aname(insert);
*INSERT [#a4daee4e]
 指定したテーブルに、新しいいくつかの行を追加します。
SQL,DSQLおよびisqlから使用出来ます。~
 この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの
各リリースノートにおける追加内容に関して反映・統合されています。~

**構文 [#yb55ee68]
&br;
 INSERT [TRANSACTION transaction] INTO <object> [(col [, col …])]
        {VALUES (<val> [, <val> …]) | <select_expr>};

 <object> = tablename | viewname

 <val> = {:variable | <constant> | <expr>
     | <function> | udf ([<val> [, <val> …]])
     | NULL | USER | RDB$DB_KEY | ?
     } [COLLATE collation]

 <constant> = num | 'string' | charsetname 'string'

 <function> = CAST (<val> AS <datatype>)
     | UPPER (<val>)
     | GEN_ID (generator, <val>)

|引数|説明|h
|expr|1つの値が得られるSQL式|
|select_expr|挿入する列数と同じ数の列データが得られる、0行以上の取得結果が得られるSELECT文|

**詳細の説明 [#t050db0c]
 指定したテーブルまたビューに、新しいいくつかの行を追加します。列に入力する
値のソースとしては、定数(含む文字列)以外にも、式、UDF、任意のSELECT文による
クエリ結果などが指定可能です。
埋め込みSQL等の場合には、変数名も使用できます。~
&br;
-プレースホルダ(例:"?")は、SQL及びisqlでは使用できません。
-DSQLとisqlでは、valに変数(:variable)は使用できません。
-BLOBの列に COLLATE を指定することは出来ません。
-DSQLの場合は行終端文字のセミコロンを指定してはなりません。
isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
-節の詳細の説明です。
|引数|説明|h
|TRANSACTION transaction|指定した名前のトランザクション下でINSERTが実行されます。&br;DSQL,isqlでは使用できません。|
|INTO object|データをインサートする、有効なテーブルまたはビューを指定します。|
|col|値をインサートする、有効なテーブルまたはビューのの列名を指定します。|
|VALUES (val [, val …])|テーブルまたはビューにインサートするデータのリスト。並び順はターゲットの列と同じ順番である必要がある|
|select_expr|ターゲットの列に挿入するデータを得るためのクエリ|
&br;
 INSERTは、1つ以上の新しい行データをテーブルまたはビューに追加します。
INSERTは、GRANTおよびREVOKE文により制御されるデーターベースに対する特権の
一つです。~
&br;
 (省略可能な)ターゲットとなる列のリストが示された場合、指定された値はリスト
での列指定順に指定されているものとみなされます。指定がない列には、自動的に
デフォルト値またはnullが設定されます。~
&br;
 ターゲットとなる列のリストが示されない(省略された)場合には、VALUE節には
すべての列分の設定する値を記述しなければなりません。~
&br;
 1つの行をインサートする場合、通常はVALUESに値を指定して行います。~
&br;
 複数行のデータを一度にインサートする場合、別のテーブルからデータを取り出す
select_expr指定を使います。ここで選択される列は、インサートするターゲット
となる列の指定と一致しなければなりません。~
 ''重要'' 同じテーブルからインサートすることも可能ですが、無限ループに陥る
可能性があるので、お勧めしません。~
&br;
 TRANSACTION節は、多重トランザクションSQLアプリケーションにおいて、どの
トランザクションがINSERTを実行するかを制御するためにあります。これはDSQLや
isqlでは使用できません。~

**用例 [#od4a00b8]
-単純な行の追加
 INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID)
   VALUES (100, 'Simple');

-埋め込みSQLの例:割当てられた2つの変数の内容の行を追加します。
 EXEC SQL
 
 INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID)
   VALUES (:emp_no, :proj_id);

&br;
-isqlの例:SELECTにより指定された行の挿入
 INSERT INTO PROJECTS
   SELECT * FROM NEW_PROJECTS
     WHERE NEW_PROJECTS.START_DATE > '6-JUN-1994';

&br;

**参照 [#ccd6726a]
GRANT , REVOKE , SET TRANSACTION , [[UPDATE>#update]]

&br;
&br;
----
&br;
&br;

&aname(update);
*UPDATE [#y7a8528c]
 テーブル、ビュー、アクティブなカーソルに対して、行のすべてまたは一部の
列データ値を変更します。
SQL,DSQLおよびisqlから使用出来ます。~
 この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの
各リリースノートにおける追加内容に関して反映・統合されています。~

**構文 [#y165ffab]
&br;
''SQL での構文:''
 UPDATE [TRANSACTION transaction] {table | view}
 SET col = <val> [, col = <val> …]
 [WHERE <search_condition> | WHERE CURRENT OF cursor];

&br;
''DSQL,isql での構文:''
 UPDATE {table | view}
 SET col = <val> [, col = <val> …]
 [WHERE <search_condition>]
&br;

 <val> = {
         col [<array_dim>]
         | :variable
         | <constant>
         | <expr>
         | <function>
         | udf ([<val> [, <val> …]])
         | NULL
         | USER
         | ?
     }
     [COLLATE collation]

 <array_dim> = [[x:]y [, [x:]y …]]

 <constant> = num | 'string' | charsetname 'string'

 <function> = CAST (<val> AS <datatype>)
     | UPPER (<val>)
     | GEN_ID (generator, <val>)

 <expr> = 1つの値を返すSQL式

 <search_condition> = CREATE TABLE を参照してください


**詳細の説明 [#z7959954]
 指定したテーブル、ビュー、アクティブなカーソルに対して、行のすべてまたは
一部の列値を更新します。値のソースとしては、定数(含む文字列)以外にも、式、
UDF、SQL式よるクエリ結果などが指定可能です。
埋め込みSQL等の場合には、変数名も使用できます。~
&br;
-プレースホルダ(例:"?")は、SQL及びisqlでは使用できません。
-DSQLとisqlでは、valに変数(:variable)は使用できません。
-BLOBの列に COLLATE を指定することは出来ません。
-DSQLの場合は行終端文字のセミコロンを指定してはなりません。
isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
-節の詳細の説明です。
|引数|説明|h
|TRANSACTION transaction|指定した名前のトランザクション下でUPDATEが実行されます。&br;DSQL,isqlでは使用できません。|
|table|view|更新対象の名前がテーブルかビューかを指定します。|
|SET col = val|指定列のに設定する値を指定します。|
|WHERE search_condition|検索更新時に指定します。更新対象になる行を検索する条件を指定します。|
|WHERE CURRENT OF cursor|位置指定更新時に指定します。更新対象になる行を特定するカーソルを指定します。|
|?|プレースホルダ。DSQLおよびisqlでは使用できません|
&br;
 UPDATEは、テーブルまたはビューの1つ以上の行データ更新します。
UPDATEは、GRANTおよびREVOKE文により制御されるデーターベースに対する特権の
一つです。~
&br;
 WHERE を使用することにより、指定条件に合致した行のみを変更することが出来
ます。ただし、これは配列の一部要素に対しては使用できません。~
&br;
 ''重要'' WHERE節が省略された場合、すべての列に対して指定した更新が行われ
ます。~
&br;
 WHERE CURRENT OF節によるカーソルによる位置指定更新の場合、1回の実行で1行
の更新が行われます。~
&br;
※ BLOB列を更新する場合、UPDATEはすべてのBLOBを新しい値に置き換えます。

**用例 [#od16eee7]
-すべての行の指定列を変更します。
 UPDATE CITIES
   SET POPULATION = POPULATION * 1.03;
&br;
-指定された条件の行を変更します。
 UPDATE TESTTABLES
   SET STATUS = 20, FLAG=0
   WHERE FLAG = 1;
&br;
-埋め込みSQLの例:WHEREでの条件指定の例ですが、条件値と設定値を変数で与えて
います。
 EXEC SQL
 UPDATE PROJECT
   SET PROJ_DESC = :blob_id
   WHERE PROJ_ID = :proj_id;
&br;

**参照 [#la824ce5]
[[DELETE>#delete]] , GRANT , [[INSERT>#insert]] , REVOKE , [[SELECT]]

&br;
&br;
----
&br;
&br;

&aname(delete);
*DELETE [#ve506b16]
 テーブル、アクティブなカーソルの行を削除します。
SQL,DSQLおよびisqlから使用出来ます。~
 この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの
各リリースノートにおける追加内容に関して反映・統合されています。~

**構文 [#oba88eb9]
&br;
''SQLおよびDSQLでの構文:''&br;
※DSQLの場合、セミコロンは不要です。
 DELETE [TRANSACTION transaction] FROM table
     {[WHERE <search_condition>] | WHERE CURRENT OF cursor};

''isqlでの構文:''

 DELETE FROM TABLE [WHERE <search_condition>];
&br;
 <search_condition> = [[SELECT]]を参照して下さい。

|引数|説明|h
|TRANSACTION transaction|指定した名前のトランザクション下で実行されます。&br;DSQL,isqlでは使用できません。|
|table|行を削除するテーブルの名前です。|
|WHERE search_condition|削除する行を検索する条件を指定します。この節を省略すると、すべての行に対して処理が行われます。|
|WHERE CURRENT OF cursor|削除対象になる行を特定するカーソルを指定します。|

**詳細の説明 [#n284421c]
 DELETEは、テーブルまたはビューの1つ以上の行を削除します。
DELETEは、GRANTおよびREVOKE文により制御されるデーターベースに対する特権の
一つです。~
&br;
 TRANSACTION節は、多重トランザクションSQLアプリケーションにおいて、どの
トランザクションがDELETEを実行するかを制御するためにあります。これはDSQLや
isqlでは使用できません。~
&br;
 WHERE を使用することにより、指定条件に合致した行のみを削除することが出来
ます。~
&br;
 ''重要'' WHERE節が省略された場合、テーブルの全列が削除されます。~
&br;
 WHERE CURRENT OF節によるカーソルによる位置指定削除の場合、1回の実行で1行
の削除が行われます。~
&br;

**用例 [#x90f3111]
-テーブルのすべての行を削除します。
 DELETE FROM EMPLOYEE_PROJECT;
&br;
-指定された条件に合致する行を削除します。
 DELETE FROM TESTTABLES WHERE ID = 0 OR FLAG = 2;
&br;
-埋め込みSQLの例:ホスト言語の変数で指定した条件に合致する行を削除します。
 EXEC SQL
 DELETE FROM SALARY_HISTORY
   WHERE EMP_NO = :emp_num;
&br;
-埋め込みSQLの例:ホスト変数:min_popよりもPOPULATIONが小さい行を検索する
カーソルを作成し、そのカーソルにより削除を行います。FETCHにより1行ずつ
取り込み、その行を削除しています。
 EXEC SQL
 DECLARE SMALL_CITIES CURSOR FOR
 SELECT CITY, STATE
 FROM CITIES
 WHERE POPULATION < :min_pop;
 
 EXEC SQL
 OPEN SMALL_CITIES;
 
 EXEC SQL
 FETCH SMALL_CITIES INTO :cityname, :statecode;
 
 WHILE (!SQLCODE)
 {
   EXEC SQL
   DELETE FROM CITIES
   WHERE CURRENT OF SMALL_CITIES;
 
   EXEC SQL
   FETCH SMALL_CITIES INTO :cityname, :statecode;
 }
 
 EXEC SQL
 CLOSE SMALL_CITIES;


**参照 [#r7064a7e]
DECLARE CURSOR , FETCH , GRANT , OPEN , REVOKE , [[SELECT]]