在表中建立新行。
文法
INSERT INTO table[subquery][@dblink ] [ ( column [, ...] ) ]
{ VALUES ( { expression | DEFAULT } [, ...] )
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
| query }說明
INSERT 允許您在表中插入新行。您可以一次插入一行,也可以插入多個行作為查詢結果。
目標列表中的列可以按任意順序列出。目標列表中不存在的各列將使用預設值插入,即其聲明的預設值或 null 值。
如果各列的運算式沒有採用正確的資料類型,將嘗試進行自動類型轉換。
僅當在 SPL 程式中使用 INSERT 命令且使用 VALUES 子句時,才能指定 RETURNINGINTO { record | variable [, ...] } 子句。
僅當在 SPL 程式中使用 INSERT 命令時,才能指定 RETURNING BULK COLLECT INTO collection [, ...] 子句。如果指定多個 collection 作為 BULK COLLECT INTO 子句,則每個 collection 必須由單個標量欄位組成,即 collection 不能是記錄。對於插入的每行,return_expression 的計算值成為 collection 中的元素,從第一個元素開始。會刪除 collection 中的所有現有行。如果結果集為空白,則 collection 也將為空白。
您必須具有表的 INSERT 特權,才能在其中插入。如果您使用 query 子句插入來自查詢的行,還需要對查詢中使用的所有表具有 SELECT 特權。
參數
| 參數 | 說明 |
| table | 現有表的名稱(可能是 schema 限定的)。 |
| dblink | 用於標識遠端資料庫的 database link 名稱。有關 database link 的資訊,請參見 CREATE DATABASE LINK 命令。 |
| column | table 中的列名。 |
| expression | 要分配給 column 的運算式或值。 |
| DEFAULT | 該列中將填入其預設值。 |
| query | 提供要插入的行的查詢(SELECT 語句)。請參見 SELECT 命令中的文法說明。 |
| return_expression | 可能包括 table 中一列或多列的運算式。如果在 return_expression 中指定 table 中的列名,則按如下方式確定在對 return_expression 求值時替換該列的值:
|
| record | 要為其欄位分配 return_expression 求值結果的記錄。第一個 return_expression 分配給 record 中的第一個欄位,第二個 return_expression 分配給 record 中的第二個欄位,以此類推。record 中的欄位數量必須與運算式數量準確匹配,而且欄位類型必須與為其分配的運算式類型相容。 |
| variable | 要為其分配 return_expression 求值結果的變數。如果指定多個return_expression 和 variable,則第一個 return_expression 分配給第一個 variable,第二個 return_expression 分配給第二個 variable,以此類推。在 INTO 關鍵字之後指定的變數數量必須與在 RETURNING 關鍵字之後的運算式數量準確匹配,而且變數類型必須與為其分配的運算式類型相容。 |
| collection | 根據 return_expression 求值結果在其中建立元素的集合。可能存在單個集合(該集合可能是由單個欄位組成的集合,也可能是由記錄類型組成的集合),也可能存在多個集合(在這種情況下,每個集合必須由單個欄位組成)。返回運算式的數量和順序必須與所有指定集合中欄位的數量和順序匹配。每組對應的 return_expression 與 collection 欄位的類型必須相容。 |
| subquery | 子查詢語句。 |
樣本
將單個行插入表 emp:
INSERT INTO emp VALUES (8021,'JOHN','SALESMAN',7698,'22-FEB-07',1250,500,30);在以上第二個樣本中,列 comm 被省略,因此它將具有預設值 null:
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, deptno)
VALUES (8022,'PETERS','CLERK',7698,'03-DEC-06',950,30);第三個樣本為 hiredate 和 comm 列使用 DEFAULT 子句而不是指定值:
INSERT INTO emp VALUES (8023,'FORD','ANALYST',7566,NULL,3000,NULL,20);該樣本為部門名稱建立一個表,然後通過選擇 dept 表的 dname 列來插入表中:
CREATE TABLE deptnames (
deptname VARCHAR2(14)
);
INSERT INTO deptnames SELECT dname FROM dept;將select * from table1的結果作為一個目標對象,並在目標對象中插入一行資料(1,1,1):
INSERT INTO (SELECT * FROM table1) VALUES (1, '1', 1) ;