リファレンスガイド> TDV SQLのキーワードと構文> INSERT
 
INSERT
INSERTステートメントは、テーブルに行を追加します。 1つのステートメントで1行または複数行を挿入できます。
INSERTステートメントは、SQLスクリプトまたはJDBC/ODBC呼び出しからのみ使用できます。 ビューでのINSERT、UPDATE、およびDELETEも参照してください。
INSERT INTOステートメントを使用して、列名を指定せずに値の完全な行を挿入することもできます。テーブル内のすべての列に、DDLで指定された順序で値を指定する必要があります。値の数がテーブルの列の数と同じでない場合、または特定のデータタイプに値が許可されていない場合、例外がスローされます。
INSERTステートメント自体は結果を返しませんが、データベースシステムは、影響を受けた行の数を示すメッセージを返します。次に、データソースにクエリを実行して挿入を確認できます。
警告: INSERTステートメントを使用してデータがTDVを介して移動されているときにネットワーク接続が切断されると、クエリが失敗する可能性があります。接続が再確立されると、TDVサーバーはデータを調整できません。障害が発生した時期、移動した可能性のあるデータの量、および障害を解決するための最良の方法を判別する必要があります。
TDVは、次のデータソースに対してのみINSERTをサポートします。
TDV
Oracle
DataDirect-メインフレーム
PostgreSQL
ファイル-区切り
REST
Informix
SOAP
Microsoft Access(Windowsプラットフォームのみ)
Sybase ASE
Microsoft Excel
Sybase IQ
Microsoft SQL Server
Teradata
MySQL
Netezza
 
注:アダプターなどのアドオンについては、ドキュメントを参照して、INSERTがサポートされているかどうかを確認してください。
データソースとしてのTDVでは、3つの形式のINSERT構文がサポートされています。
構文1
INSERT INTO <table_name> DEFAULT VALUES
構文2
INSERT INTO <table_name> [(<columnA, ... columnX>)]
VALUES (<valueList>)[,(<valueList>)]*
構文3
INSERT INTO <table_name> [(<columnA, ... columnX>)]
<queryExpression>
 
開き括弧と閉じ括弧はグループ化に使用されます。 <queryExpression>は、SELECTステートメントを示します。
列のリストはオプションです。いずれの場合も、値の数とタイプは等しく、行の列数または指定された数と一致している必要があります。 例(<queryExpression>を使用した複数行INSERT)を参照してください。
備考
サブクエリの並べ替えは役に立たないため、システムはサブクエリ内のORDER BYを自動的に破棄します。
複数行のINSERTでは、クエリ結果にINSERTステートメントの列リストと同じ順序で同じ数の列が含まれている必要があり、データタイプは列ごとに互換性があります。
null不可能な列がNULLに設定されている場合、データソースは実行時例外を送出します。
INSERTステートメントには、null許容でないすべての列を含める必要があります。
派生列をINSERTステートメントに含めることはできません。
例(単一行INSERT)
PROCEDURE sc2()
  BEGIN
    INSERT INTO
      /shared/examples/ds_inventory/products (ProductID, ProductName, UnitPrice)
    VALUES (23, 'monitor', 500.00);
  END
例(複数行のINSERT)
PROCEDURE sc2()
  BEGIN
    INSERT INTO
       /shared/examples/ds_inventory/products (ProductID, ProductName,
          UnitPrice)
     VALUES
       (41, 'monitor', 1000/10 * 1),
       (42, 'monitor', 1000/10 * 1),
       (43, 'monitor', 1000/10 * 1);
  END
例(<queryExpression>を使用した複数行のINSERT)
PROCEDURE get_open_orders(OUT numOpen INTEGER)
BEGIN
-- Clear the table
DELETE FROM /users/composite/test/sources/mysql/updates;
 
-- Get all open orders
INSERT INTO /users/composite/test/sources/mysql/updates
(c_bigint, c_varchar)
SELECT OrderID, Status
FROM /shared/tutorial/sources/ds_orders/orderdetails
WHERE Status = 'Open';
 
-- Return number of open orders
SELECT count(*) INTO numOpen
FROM /users/composite/test/sources/mysql/updates;
END
例(デフォルトでINSERT)
INSERT INTO Customers (FirstName, LastName, Country)
VALUES ('joe','Ely', DEFAULT)
 
ターゲットデータベースがDEFAULTキーワードをサポートしていない場合、例外がスローされます。
列にデフォルトが定義されておらず、null許容でない場合、ランタイム例外がスローされます。
例(デフォルト値を使用したINSERT)
INSERT INTO Customers DEFAULT VALUES
 
DEFAULT VALUES句が指定されている場合、すべての列に適切なデフォルト(場合によってはnull)を含む単一の行がテーブルに挿入されます。いずれかの列にデフォルトがない場合はエラーになります。