总结下Oracle 中的Insert用法

本文详细介绍了Oracle数据库中插入数据的各种技巧,包括标准插入、多表多行插入、有条件插入及旋转插入等,并提供了丰富的示例代码。

生命不息,奋斗不止

总结下Oracle 中的Insert用法

1.标准Insert --单表单行插入
  语法:
 
  INSERT INTO table [(column1,column2,...)] VALUE (value1,value2,...)
 
  例子:
  
  insert into dep (dep_id,dep_name) values(1,'技术部');
  
  备注:使用标准语法只能插入一条数据,且只能在一张表中插入数据
 
2, 无条件 Insert all --多表多行插入
 
   语法:
INSERT [ALL] [condition_insert_clause]
[insert_into_clause values_clause] (subquery)
 
   示例:
INSERT ALL
INTO sal_history(emp_id,hire_date,salary) values (empid,hiredate,sal)
INTO mgr_history(emp_id,manager_id,salary) values (empid,hiredate,sal)
SELECT employee_id empid,hire_date hiredate,salary sal,manager_id mgr
FROM employees
WHERE employee_id>200;
 
3,有条件的Insert
    语法:
INSERT [ALL | FIRST]
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
......
[ELSE] [insert_into_clause values_clause] 
Subquery;
 
    示例:
Insert All
when id>5 then into z_test1(id, name) values(id,name)
when id<>2 then into z_test2(id) values(id)
else into z_test3 values(name)
select id,name from z_test;
 
当使用ALL关键字时,oracle会从上至下判断每一个条件,当条件满足时就执行后面的into语句
在上面的例子中,如果ID=6 那么将会在z_test1中插入一条记录,同时也在z_test2中插入一条记录
 
    备注:
      当使用FIRST关键字时,oracle会从上至下判断每一个条件,当遇到第一个满足时就执行后面的into语句,
      同时中断判断的条件判断,在上面的例子中,如果ID=6,仅仅会在z_test1中插入一条数据
 
4, 旋转Insert (pivoting insert)
 
create table sales_source_data (
employee_id number(6),
week_id number(2),
sales_mon number(8,2),
sales_tue number(8,2),
sales_wed number(8,2),
sales_thur number(8,2),
sales_fri number(8,2)
);
insert into sales_source_data values (176,6,2000,3000,4000,5000,6000);
 
create table sales_info (
employee_id number(6),
week number(2),
sales number(8,2)
);
 
看上面的表结构,现在将要sales_source_data表中的数据转换到sales_info表中,这种情况就需要使用旋转Insert
 
示例如下:
insert all
into sales_info values(employee_id,week_id,sales_mon)
into sales_info values(employee_id,week_id,sales_tue)
into sales_info values(employee_id,week_id,sales_wed)
into sales_info values(employee_id,week_id,sales_thur)
into sales_info values(employee_id,week_id,sales_fri)
select employee_id,week_id,sales_mon,sales_tue,
sales_wed,sales_thur,sales_fri
from sales_source_data;
 
从该例子可以看出,所谓旋转Insert是无条件 insert all 的一种特殊应用,但这种应用被oracle官方,赋予了一个pivoting insert的名称,即旋转insert
分类: EBS - DBA

« 上一篇: OAF500错误原因参考
» 下一篇: 查看某个对象的锁
Oracle 数据库中,`INSERT` 通常用于向表中插入数据,而非作为一个函数使用。以下是 Oracle 中 `INSERT` 语句的常见用法: #### 单表插入 将查询结果插入到目标表中,语法如下: ```sql INSERT INTO dest_table (column1, column2, ...) SELECT value1, value2, ... FROM source_table WHERE condition; ``` 例如,将 `source_table` 中的数据插入到 `dest_table` 中: ```sql INSERT INTO dest_table (col1, col2) SELECT col_a, col_b FROM source_table WHERE col_a > 10; ``` #### 多表插入(`INSERT ALL`) 可以同时向多个目标表插入数据,语法如下: ```sql INSERT ALL INTO dest_table1 (column1, column2, ...) VALUES (value1, value2, ...) INTO dest_table2 (column1, column2, ...) VALUES (value1, value2, ...) SELECT value1, value2, ... FROM source_table WHERE condition; ``` 例如,将 `source_table` 中的数据同时插入到 `dest_table1` 和 `dest_table2` 中: ```sql INSERT ALL INTO dest_table1 (col1, col2) VALUES (col_a, col_b) INTO dest_table2 (col1, col2) VALUES (col_a, col_b) SELECT col_a, col_b FROM source_table WHERE col_a > 10; ``` #### 使用 `RETURNING` 子句 在存储过程、PL/SQL 块里需要返回 `INSERT` 语句执行后的信息时使用,语法如下: ```sql INSERT INTO dest_table (column1, column2, ...) VALUES (value1, value2, ...) RETURNING column1, column2, ... INTO variable1, variable2, ...; ``` 例如,插入一条记录并返回插入记录的主键值: ```sql DECLARE v_id NUMBER; BEGIN INSERT INTO dest_table (col1, col2) VALUES ('value1', 'value2') RETURNING id INTO v_id; DBMS_OUTPUT.PUT_LINE('Inserted record with ID: ' || v_id); END; ``` #### 注意事项 - 不能违反已有的约束,例如某列不允许为空,插入空值会出错[^1]。 - `INSERT` 这类 DML 语句不会自动提交,需要使用 `COMMIT` 提交后,其他用户才能看到更改[^1]。 - 如果 `INSERT INTO` 后面列的清单中未给出某些列,且这些列可以为空,Oracle 会自动将未列出的列赋值为空[^1]。 - 可以在 `INSERT` 语句中使用 Oracle 预定义的函数和关键字,例如 `SYSDATE` 等[^1]。 - 可以在 `INSERT INTO` 语句的任何位置使用嵌套子查询[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值