INSERT
添加一个或多个记录到表中。
主要语法结构
语法格式
sql
INSERT INTO [schema_name.] table_name
[PARTITION ( part_name_list ) | SUBPARTITION ( subpart_name_list )]
insert_rest
[RETURNING target_list opt_bulk opt_into_list];
参数说明
schema_name
:模式名。table_name
:表名。part_name_list
:表的分区名。subpart_name_list
:表的子分区名。
插入内容insert_rest
语法格式
sql
insert_rest::=
VALUES ( target_list )[( target_list ) | ,( target_list )]...
| DEFAULT VALUES
| selectstmt
| ( columnList ) VALUES ( target_list )[( target_list ) | ,( target_list )]...
| ( columnList ) selectstmt
| VALUES ident
| ( columnList ) VALUES ident
参数说明
VALUES ( target_list )[( target_list ) | ,( target_list )]...
:直接插入一组或多组值。DEFAULT VALUES
:插入默认值,适用于所有列都有默认值的情况。selectstmt
:一个 SELECT 语句,返回要插入的数据。从子查询中插入数据。( columnList ) VALUES ( target_list )[( target_list ) | ,( target_list )]...
:指定列列表并插入一组或多组值。( target_list )
插入的数据有以下形式:(expr1, expr2, ..., exprn)
,括号中以逗号分隔的每项可以是常值、表达式等,每项与要插入数据的列对应。(expr1, expr2, ..., exprn) (expr1, expr2, ..., exprn) ...
等,用以在一条语句里插入多行数据。(expr1, expr2, ..., exprn),(expr1, expr2, ..., exprn),...
等,使用英文逗号分隔每一行插入的数据,插入多行数据。
( columnList ) selectstmt
:指定列列表并从子查询中插入数据。VALUES ident
:插入一个标识符(通常是变量或参数)。( columnList ) VALUES ident
:指定列列表并插入一个标识符(通常是变量或参数)。
返回结果target_list
语法格式
sql
target_list::=
target_el[,target_el]...
target_el::=
b_expr AS ColLabel
| b_expr ColId
| DEFAULT
| b_expr
| ident .*
| *
opt_bulk::=
/*EMPTY*/
| BULK COLLECT
opt_into_list::=
INTO ident[,ident]...
| /*empty*/
参数说明
target_list
:可选项,RETURNING后的target_list用来指定返回的内容,有以下形式:b_expr
:是一个表达式,它可以是一个简单的列名、计算表达式等。AS ColLabel
或ColId
:用于给返回的结果列重命名。DEFAULT
:关键字,可以用来表示默认值。ident .*
和*
用于选择所有列。
opt_bulk
:可选的关键词,指定该关键词后结果将一次性输出,而不是每次输出一行数据。opt_into_list
:可选的关键词, 把返回的结果输出至指定的变量或数据结构中。
示例
示例1
不指定插入列,插入值为常值。sqlINSERT INTO test_tab_1 VALUES(DEFAULT, NULL, '2000-01-01', 2.459E+23);
示例2
指定插入列,插入值为表达式。sqlINSERT INTO test_tab_2(c3, c4) VALUES(2+3, SUBSTR(c3,LEN(c3)-3,1));
示例3
指定插入列,插入值为子查询。sqlINSERT INTO test_tab_3(c3, c4)SELECT salary,addr FROM t2 WHERE t2.id > 10;
示例4
一条语句中插入多行数据。sqlINSERT INTO test_tab_4 VALUES(1, 'alpha')(DEFAULT, '')(NULL, 'beta')(4, 'gamma');
示例5
插入时将结果RETURNING。sqlDECLARE TYPE type_table_varchar IS TABLE OF VARCHAR; var_chr TYPE_TABLE_VARCHAR; BEGIN FOR i IN 1..10 LOOP INSERT INTO test_tab_5(id, c2, c3) VALUES(i, i*2.1, 'STRING_'||i) RETURNING '('||c2||','||c3||')' BULK COLLECT INTO var_chr; -- 将返回结果输出至屏幕 FOR j IN 1..var_chr.COUNT() LOOP SEND_MSG(var_chr(j)); END LOOP; END LOOP; END;
示例6
插入RECORD类型sql-- 创建表1 CREATE TABLE t1(a INT,name VARCHAR(100)); -- 插入t1表数据 INSERT INTO t1 VALUES(1,'123')(2,'123')(3,'345'); -- 创建表2 CREATE TABLE t2(a INT,name VARCHAR(100)); -- 插入t2数据 DECLARE TYPE r IS TABLE OF t1%ROWTYPE; rs r; BEGIN SELECT * BULK COLLECT INTO rs FROM t1; FOR i IN rs.FIRST ..rs.LAST loop INSERT INTO t2 VALUES rs(i); END LOOP; END;