ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース11.2.1
B56051-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

DELETE

DELETE文は、表から行を削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合は表に対するDELETEが必要です。

SQL構文

DELETE [FIRST NumRows] FROM [Owner.]TableName[CorrelationName]
[WHERE SearchCondition]
[RETURNING|RETURN Expression[,...]INTO DataItem[,...]]

パラメータ

DELETE文には、次のパラメータがあります。

パラメータ 説明
FIRST NumRows 削除する行の数を指定します。FIRST NumRowsは、副問合せの文ではサポートされていません。NumRowsには、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。
[Owner.]TableName [CorrelationName] 検索条件を満たす行を削除する表を指定します。

[Owner.]TableNameには、削除する表を指定します。

CorrelationNameは、直前で指定した表へのシノニムを指定します。その表の列にアクセスする際、DELETE文の中で実際の表名ではなく相関名を使用します。相関名は、基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。

SearchCondition 削除する行を指定します。検索条件に一致する行がない場合、表は変更されません。WHERE句を省略した場合は、すべての行が削除されます。検索条件には副問合せを含めることができます。
Expression 有効な式の構文。第3章「式」を参照してください。
DataItem 取得したExpression値を格納するホスト変数またはPL/SQL変数。

説明

発注件数が50未満の行をすべて削除します。

DELETE FROM purchasing.orderitems
WHERE quantity < 50;

idが主キーでない場合、次の問合せはすべての重複する注文を削除します。

DELETE FROM orders a
WHERE EXISTS (SELECT 1 FROM orders b
WHERE a.id = b.id and a.rowid < b.rowid);

次の順序で文を指定すると、外部キー違反が発生します。

CREATE TABLE master (name CHAR(30), id CHAR(4) NOT NULL PRIMARY KEY);
CREATE TABLE details
  (masterid CHAR(4),description VARCHAR(200),
   FOREIGN KEY (masterid) REFERENCES master(id));
INSERT INTO master('Elephant', '0001');
INSERT INTO details('0001', 'A VERY BIG ANIMAL');
DELETE FROM master WHERE id = '0001';

ビジーな表を削除しようとするとエラーが発生します。 この例では、t1はビジーな表であり、親表とそれに基づく外部キー制約となっています。

CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL,
       PRIMARY KEY (a));
CREATE TABLE t2 (c INT NOT NULL,
       FOREIGN KEY (c) REFERENCES t1(a));
INSERT INTO t1 VALUES (1,1);
INSERT INTO t2 VALUES (1);
DELETE FROM t1;

次のエラーが返されます。

SQL ERROR (3001):  Foreign key violation [TTFOREIGN_0] a row in child table T2 has a parent in the delete range.

employeesから従業員を削除します。 empidおよびnameemployee_idおよびlast_nameと同じデータ型の変数として宣言します。 行を削除し、employee_idおよびlast_nameを変数内に戻します。 正しい行が削除されたことを確認します。

Command> VARIABLE empid NUMBER(6) NOT NULL;
Command> VARIABLE name VARCHAR2(25) INLINE NOT NULL;
Command> DELETE FROM employees WHERE last_name='Ernst'
       > RETURNING employee_id, last_name INTO :empid,:name;
1 row deleted.
Command> PRINT empid name;
EMPID                : 104
NAME                 : Ernst