Oracle的多表插入語句
Oracle Insert all有三種情況:
一、無條件 INSERT ALL
二、條件 INSERT ALL
三、條件 INSERT FIRST
Insert…Select
使用Insert Select實現同時向多個表插入記錄
2007/06/25
一、無條件 INSERT ALL
---------------------------------------------------------------------------------------------
INSERT ALL
insert_into_clause values_clause_1
[insert_into_clause values_clause_2]
……
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;
----------------------------------------------------------------------------------------------
1、指定所有跟隨著的多表 insert_into_clauses 執行無條件的多表插入;
2、對於每個由子查詢返回的行, Oracle 伺服器執行每一個 insert_into_clause一次。
二、條件 INSERT ALL
---------------------------------------------------------------------------------------------
INSERT ALL
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;
--------------------------------------------------------------------------------------------
1、指定 conditional_insert_clause 來執行一個條件多表插入;
2、Oracle 伺服器通過相應的 WHEN 條件過濾每一個 insert_into_clause,確定是否執行這個 insert_into_clause;
3、一個單個的多表插入語句可以包含最多 127 個 WHEN 子句。
三、條件 INSERT FIRST
--------------------------------------------------------------------------------------------
INSERT FIRST
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]
Subquery;
--------------------------------------------------------------------------------------------
1、Oracle 伺服器對每一個出現在語句順序中的 WHEN 子句求值;
2、如果第一個 WHEN 子句的值為 true,Oracle 伺服器對於給定的行執行相應的 INTO 子句,並且跳過後面的 WHEN 子句(後面的when語句都不再考慮滿足第一個When子句的記錄,即使該記錄滿足when語句中的條件)。
注:多表 INSERT 語句上的約束
a、你只能在表而不能在檢視上執行多表插入;
b、你不能執行一個多表插入到一個遠端表;
c、在執行一個多表插入時,你不能指定一個表集合表示式;
d、在一個多表插入中,所有的 insert_into_clauses 不能組合指定多於 999 個目列;
e、只有當所有insert_into_clauses中的表資料都沒有發生更新時,Rollback才會起作用。
--樞軸式(Pivoting) INSERT
--主要用於將非關係資料轉換為關係型資料(把原來橫表,轉為豎表)
sales_source_data的格式如下:
empno,week_id,sales_MON,sales_TUE,sales_WED,sales_THUR,sales_FRI
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 ALL
二、條件 INSERT ALL
三、條件 INSERT FIRST
Insert…Select
使用Insert Select實現同時向多個表插入記錄
2007/06/25
一、無條件 INSERT ALL
---------------------------------------------------------------------------------------------
INSERT ALL
insert_into_clause values_clause_1
[insert_into_clause values_clause_2]
……
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;
----------------------------------------------------------------------------------------------
1、指定所有跟隨著的多表 insert_into_clauses 執行無條件的多表插入;
2、對於每個由子查詢返回的行, Oracle 伺服器執行每一個 insert_into_clause一次。
二、條件 INSERT ALL
---------------------------------------------------------------------------------------------
INSERT ALL
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;
--------------------------------------------------------------------------------------------
1、指定 conditional_insert_clause 來執行一個條件多表插入;
2、Oracle 伺服器通過相應的 WHEN 條件過濾每一個 insert_into_clause,確定是否執行這個 insert_into_clause;
3、一個單個的多表插入語句可以包含最多 127 個 WHEN 子句。
三、條件 INSERT FIRST
--------------------------------------------------------------------------------------------
INSERT FIRST
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]
Subquery;
--------------------------------------------------------------------------------------------
1、Oracle 伺服器對每一個出現在語句順序中的 WHEN 子句求值;
2、如果第一個 WHEN 子句的值為 true,Oracle 伺服器對於給定的行執行相應的 INTO 子句,並且跳過後面的 WHEN 子句(後面的when語句都不再考慮滿足第一個When子句的記錄,即使該記錄滿足when語句中的條件)。
注:多表 INSERT 語句上的約束
a、你只能在表而不能在檢視上執行多表插入;
b、你不能執行一個多表插入到一個遠端表;
c、在執行一個多表插入時,你不能指定一個表集合表示式;
d、在一個多表插入中,所有的 insert_into_clauses 不能組合指定多於 999 個目列;
e、只有當所有insert_into_clauses中的表資料都沒有發生更新時,Rollback才會起作用。
--樞軸式(Pivoting) INSERT
--主要用於將非關係資料轉換為關係型資料(把原來橫表,轉為豎表)
sales_source_data的格式如下:
empno,week_id,sales_MON,sales_TUE,sales_WED,sales_THUR,sales_FRI
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;
相關文章
- Oracle多表插入語句Oracle
- Oracle 使用一條insert語句完成多表插入Oracle
- oracle多表插入Oracle
- ORACLE多表關聯UPDATE語句Oracle
- ORACLE多表關聯UPDATE 語句Oracle
- 【SQL】使用一條INSERT語句完成多表插入SQL
- oracle insert all多表插入的示例Oracle
- 手擼Mysql原生語句--多表MySql
- 多表查詢建表語句
- oracle-資料庫- insert 插入語句Oracle資料庫
- OCI插入SQL語句的寫法SQL
- Oracle多表關聯更新的語法Oracle
- SQL語句批量插入資料SQL
- hibernate 多表之間的統計語句 (程式碼)
- Mysql跨表更新 多表update sql語句總結MySql
- oracle的sql語句OracleSQL
- oracle語句Oracle
- 編寫迴圈插入表資料的語句。
- 一個insert插入語句很慢的優化優化
- MySQL 匯出一條資料的插入語句MySql
- 每一千行UPDATE語句後插入一條COMMIT語句的編輯方法MIT
- Oracle Hints語句的用法Oracle
- oracle的表分析語句Oracle
- 常用的oracle基本語句Oracle
- oracle的connect by語句Oracle
- ORACLE常用語句:Oracle
- 常用oracle語句Oracle
- oracle sql語句OracleSQL
- 如何向mysql中批量插入大量sql語句MySql
- 【SQL】 Multi table insert 多表插入操作SQL
- oracle中的條件語句Oracle
- Oracle常用的查詢語句Oracle
- oracle下,drop column 的語句Oracle
- ORACLE很重要的sql語句OracleSQL
- Oracle基本SQL語句OracleSQL
- Oracle 建立序列語句Oracle
- oracle常用SQL語句OracleSQL
- Oracle迴圈語句Oracle