在表中創(chuàng)建新行。
語(yǔ)法
INSERT INTO table[subquery][@dblink ] [ ( column [, ...] ) ]
{ VALUES ( { expression | DEFAULT } [, ...] )
[ RETURNING return_expression [, ...]
{ INTO { record | variable [, ...] }
| BULK COLLECT INTO collection [, ...] } ]
| query }
說(shuō)明
INSERT
允許您在表中插入新行。您可以一次插入一行,也可以插入多個(gè)行作為查詢(xún)結(jié)果。
目標(biāo)列表中的列可以按任意順序列出。目標(biāo)列表中不存在的各列將使用默認(rèn)值插入,即其聲明的默認(rèn)值或 null 值。
如果各列的表達(dá)式?jīng)]有采用正確的數(shù)據(jù)類(lèi)型,將嘗試進(jìn)行自動(dòng)類(lèi)型轉(zhuǎn)換。
僅當(dāng)在 SPL 程序中使用 INSERT
命令且使用 VALUES
子句時(shí),才能指定 RETURNINGINTO { record | variable [, ...] }
子句。
僅當(dāng)在 SPL 程序中使用 INSERT
命令時(shí),才能指定 RETURNING BULK COLLECT INTO collection [, ...]
子句。如果指定多個(gè) collection
作為 BULK COLLECT INTO
子句,則每個(gè) collection
必須由單個(gè)標(biāo)量字段組成,即 collection
不能是記錄。對(duì)于插入的每行,return_expression
的計(jì)算值成為 collection
中的元素,從第一個(gè)元素開(kāi)始。會(huì)刪除 collection
中的所有現(xiàn)有行。如果結(jié)果集為空,則 collection
也將為空。
您必須具有表的 INSERT
特權(quán),才能在其中插入。如果您使用 query
子句插入來(lái)自查詢(xún)的行,還需要對(duì)查詢(xún)中使用的所有表具有 SELECT
特權(quán)。
參數(shù)
參數(shù) | 說(shuō)明 |
---|---|
table | 現(xiàn)有表的名稱(chēng)(可能是 schema 限定的)。 |
dblink | 用于標(biāo)識(shí)遠(yuǎn)程數(shù)據(jù)庫(kù)的 database link 名稱(chēng)。有關(guān) database link 的信息,請(qǐng)參見(jiàn) CREATE DATABASE LINK 命令。
|
column | table 中的列名。
|
expression | 要分配給 column 的表達(dá)式或值。
|
DEFAULT | 該列中將填入其默認(rèn)值。 |
query | 提供要插入的行的查詢(xún)(SELECT 語(yǔ)句)。請(qǐng)參見(jiàn) SELECT 命令中的語(yǔ)法說(shuō)明。
|
return_expression | 可能包括 table 中一列或多列的表達(dá)式。如果在 return_expression 中指定 table 中的列名,則按如下方式確定在對(duì) return_expression 求值時(shí)替換該列的值:
|
record | 要為其字段分配 return_expression 求值結(jié)果的記錄。第一個(gè) return_expression 分配給 record 中的第一個(gè)字段,第二個(gè) return_expression 分配給 record 中的第二個(gè)字段,以此類(lèi)推。record 中的字段數(shù)量必須與表達(dá)式數(shù)量準(zhǔn)確匹配,而且字段類(lèi)型必須與為其分配的表達(dá)式類(lèi)型兼容。
|
variable | 要為其分配 return_expression 求值結(jié)果的變量。如果指定多個(gè)return_expression 和 variable ,則第一個(gè) return_expression 分配給第一個(gè) variable ,第二個(gè) return_expression 分配給第二個(gè) variable ,以此類(lèi)推。在 INTO 關(guān)鍵字之后指定的變量數(shù)量必須與在 RETURNING 關(guān)鍵字之后的表達(dá)式數(shù)量準(zhǔn)確匹配,而且變量類(lèi)型必須與為其分配的表達(dá)式類(lèi)型兼容。
|
collection | 根據(jù) return_expression 求值結(jié)果在其中創(chuàng)建元素的集合??赡艽嬖趩蝹€(gè)集合(該集合可能是由單個(gè)字段組成的集合,也可能是由記錄類(lèi)型組成的集合),也可能存在多個(gè)集合(在這種情況下,每個(gè)集合必須由單個(gè)字段組成)。返回表達(dá)式的數(shù)量和順序必須與所有指定集合中字段的數(shù)量和順序匹配。每組對(duì)應(yīng)的
return_expression 與 collection 字段的類(lèi)型必須兼容。
|
subquery | 子查詢(xún)語(yǔ)句。 |
示例
將單個(gè)行插入表 emp
:
INSERT INTO emp VALUES (8021,'JOHN','SALESMAN',7698,'22-FEB-07',1250,500,30);
在以上第二個(gè)示例中,列 comm
被省略,因此它將具有默認(rèn)值 null:
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, deptno)
VALUES (8022,'PETERS','CLERK',7698,'03-DEC-06',950,30);
第三個(gè)示例為 hiredate
和 comm
列使用 DEFAULT
子句而不是指定值:
INSERT INTO emp VALUES (8023,'FORD','ANALYST',7566,NULL,3000,NULL,20);
該示例為部門(mén)名稱(chēng)創(chuàng)建一個(gè)表,然后通過(guò)選擇 dept
表的 dname
列來(lái)插入表中:
CREATE TABLE deptnames (
deptname VARCHAR2(14)
);
INSERT INTO deptnames SELECT dname FROM dept;
將select * from table1
的結(jié)果作為一個(gè)目標(biāo)對(duì)象,并在目標(biāo)對(duì)象中插入一行數(shù)據(jù)(1,1,1):
INSERT INTO (SELECT * FROM table1) VALUES (1, '1', 1) ;