[Oracle] 同時新增資料到多張資料表中

[Oracle] 同時新增資料到多張資料表中

一,語法

INSERT ALL | FIRST

INSERT_INTO_CLAUSE [VALUE_CLAUSE] SUBQUERY

二,範例

INSERT ALL
WHEN C1 = 'TEST1' THEN INTO TEST1
WHEN C1 = 'TEST2' THEN INTO TEST2
ELSE INTO TEST3
SELECT * FROM JOB;

三,實作結果

--建立四張測試用資料表
CREATE TABLE TEST1 (C1 VARCHAR2(20));
CREATE TABLE TEST2 (C1 VARCHAR2(20));
CREATE TABLE TEST3 (C1 VARCHAR2(20));
CREATE TABLE JOB (C1 VARCHAR2(20));

--先將測試用資料新增到JOB資料表中
BEGIN
      FOR I IN 1..100 LOOP
            INSERT INTO job VALUES('TEST1');
      END LOOP;

      FOR I IN 1..80 LOOP
            INSERT INTO job VALUES('TEST2');
      END LOOP;

      FOR I IN 1..60 LOOP
            INSERT INTO job VALUES('TEST3');
      END LOOP;
END;

--開始測試多資料表新增
INSERT ALL
WHEN C1 = 'TEST1' THEN INTO TEST1
WHEN C1 = 'TEST2' THEN INTO TEST2
ELSE INTO TEST3
SELECT * FROM JOB;

--查看各資料表資料筆數
SELECT
           (SELECT COUNT(*) FROM TEST1) AS TEST1
          ,(SELECT COUNT(*) FROM TEST2) AS TEST2
          ,(SELECT COUNT(*) FROM TEST3) AS TEST3
FROM DUAL;

clip_image001

PS:從Oracle 9i之後的版本才可以使用。


我的優點就是把學過的東西給忘記,

我的缺點就是可以無限學習新事物。

水滿了要把水倒掉才可以再裝水,歸零學習。