在表中创建新行。
语法
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) ;