在表中創(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í)替換該列的值:
  • 如果在 INSERT 命令中為在 return_expression 中指定的列分配值,則在對(duì) return_expression 求值時(shí)會(huì)使用分配的值。
  • 如果在 INSERT 命令中沒(méi)有為在 return_expression 中指定的列分配值,且表的列定義中不存在列的默認(rèn)值,則在對(duì) return_expression 求值時(shí)會(huì)使用 null。
  • 如果在 INSERT 命令中沒(méi)有為在 return_expression 中指定的列分配值,且表的列定義中不存在列的默認(rèn)值,則在對(duì) return_expression 求值時(shí)會(huì)使用默認(rèn)值。
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_expressionvariable,則第一個(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_expressioncollection 字段的類(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è)示例為 hiredatecomm 列使用 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) ;