oracle多表insert语句的使用

早过忘川 提交于 2020-03-08 11:26:09

oracle从9i开始可以用一条insert语句实现向多个表中插入数据:
INSERT [ALL] [conditional_insert_clause]
[insert_into_clause values_clause](subquery)

subquery:子查询语句,可以是任何合法的select语句

conditional_insert_clause如下:
[ALL][FIRST]
[WHEN condition THEN][insert_into_clause values_clause]
[ELSE] [insert_into_clause values_clause]
此语法包含了无条件和有条件两种情况:

无条件INSERT ALL:
INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL,manager_id MGR
FROM employees
WHERE employee_id>200;
因为没有附加任何限制于检索出的记录,所以所有检出返回数据将根据其列名插入相应的表中。

有条件的INSERT ALL:
INSERT ALL
WHEN SAL>10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR>200 THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL,manager_id MGR
FROM employees
WHERE employee_id>200;

这里将进行比较,返回的记录将比较其SAL,如果大于10000则插入SAL_HISTORY,同理,MGR大于200的记录将插入MGR_HISTORY,其余都将丢弃。

有条件的FIRST INSERT:
FIRST和ALL的区别在于当遇到第一个求值为true的子句之后,停止对WHEN子句求值,而ALL不论求值是否为true。
INSERT FIRST
WHEN SAL>10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN SAL<5000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR>200 THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL,manager_id MGR
FROM employees
WHERE employee_id>200;

上面的例子中,如果第一个when子句求值为true,则其后的when子句将不会被执行,反之将直至遇到第一个满足条件的子句执行为止。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!