[轉貼]總結下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
 
發佈了15 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章