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