Oracle insert all语句介绍

来源:互联网 发布:个人域名怎么备案 编辑:程序博客网 时间:2024/06/06 12:41

Oracle 中insert语句的高级用法,INSERT ALL 语句介绍:


1、无条件insert all 全部插入


[sql] view plain copy
  1. CREATE TABLE t1(product_id NUMBER, product_name VARCHAR2(80),MONTH NUMBER);  
  2.   
  3. INSERT INTO t1 VALUES(111, '苹果',1);  
  4. INSERT INTO t1 VALUES(222, '橘子',1);  
  5. INSERT INTO t1 VALUES(333, '香蕉',1);  
  6.   
  7. COMMIT;  
  8.   
  9. CREATE TABLE t2 AS SELECT * FROM t1 WHERE 1=2;  
  10.   
  11. INSERT ALL  
  12.     INTO t2   
  13.     VALUES (product_id, product_name,MONTH)  
  14.     INTO t2   
  15.     VALUES (product_id, product_name,MONTH+1)  
  16.     INTO t2   
  17.     VALUES (product_id, product_name,MONTH+2)  
  18.     INTO t2   
  19.     VALUES (product_id, product_name,MONTH+3)   
  20. SELECT product_id, product_name, MONTH  
  21. FROM t1;  
  22.   
  23. COMMIT;  
  24.   
  25. SELECT * FROM t2 ORDER BY product_id, product_name, MONTH;  


---------- ---------- ----------
       111 苹果                1
       111 苹果                2
       111 苹果                3
       111 苹果                4
       222 橘子                1
       222 橘子                2
       222 橘子                3
       222 橘子                4
       333 香蕉                1
       333 香蕉                2
       333 香蕉                3
       333 香蕉                4


已选择12行。



2、有条件insert all


[sql] view plain copy
  1. CREATE TABLE small_orders  
  2. (order_id   NUMBER(12) NOT NULL,  
  3.  customer_id    NUMBER(6) NOT NULL,  
  4.  order_total    NUMBER(8,2),  
  5.  sale_rep_id    NUMBER(6)  
  6.       
  7. );  
  8.   
  9. CREATE TABLE medium_orders AS SELECT * FROM small_orders;  
  10.   
  11. CREATE TABLE large_orders AS SELECT * FROM small_orders;  
  12.   
  13. CREATE TABLE special_orders  
  14. (order_id   NUMBER(12)  NOT NULL,  
  15.  customer_id    NUMBER(6)   NOT NULL,  
  16.  order_total    NUMBER(8,2),  
  17.  sale_rep_id    NUMBER(6),  
  18.  credit_limit   NUMBER(9,2),  
  19.  cust_email     VARCHAR2(30)  
  20.   
  21. );  
  22.   
  23. INSERT ALL  
  24.     WHEN order_total < 100000 THEN  
  25.         INTO small_orders  
  26.     WHEN order_total > 100000 AND order_total < 200000 THEN  
  27.         INTO medium_orders  
  28.     ELSE  
  29.         INTO large_orders  
  30.     SELECT order_id, customer_id, order_total, sales_rep_id   
  31.       FROM orders;  


3、有条件insert first

    如果第一个 WHEN 子句的值为 true,oracle 服务器对于给定的行执行相应的 INTO 子句,
    并且跳过后面的 WHEN 子句(后面的when语句都不再考虑满足第一个When子句的记录,即使该记录满足when语句中的条件)。


[sql] view plain copy
  1. INSERT FIRST  
  2.    WHEN ottl < 100000 THEN  
  3.       INTO small_orders  
  4.          VALUES(oid, ottl, sid, cid)  
  5.    WHEN ottl > 100000 and ottl < 200000 THEN  
  6.       INTO medium_orders  
  7.          VALUES(oid, ottl, sid, cid)  
  8.    WHEN ottl > 290000 THEN  
  9.       INTO special_orders  
  10.    WHEN ottl > 200000 THEN  
  11.       INTO large_orders  
  12.          VALUES(oid, ottl, sid, cid)  
  13.    SELECT o.order_id oid, o.customer_id cid, o.order_total ottl,  
  14.       o.sales_rep_id sid, c.credit_limit cl, c.cust_email cem  
  15.       FROM orders o, customers c  
  16.       WHERE o.customer_id = c.customer_id;  
  17.         
  18. SELECT * FROM small_orders;  
  19. SELECT * FROM medium_orders;  
  20. SELECT * FROM large_orders;  
  21. SELECT * FROM special_orders;