1. 程式人生 > >PL\SQL如何將從一張表中選出的資料插入到另一張表中

PL\SQL如何將從一張表中選出的資料插入到另一張表中



今天在做資料庫操作的時候,有一個需求是將A表中的前500000條資料查出來,然後插入到表B中.表A與表B具有同樣的欄位型別,資料庫為Oracle 10g,資料庫管理工具用的PL\SQL,由於資料庫不是特別的熟,於是在網上查到如下語法:

insert into B select * from A  where rownum <= 500000;

然而,我的PL\SQL工具既沒有報錯,插入的時間也總是顯示為0.查詢表B,始終也沒有資料.

問了一圈,依然沒有解決.這就是PL\SQL不乖了,怎麼說你也報個錯啊,哥.不然都不知道怎麼下手……

於是,先在MySQL資料庫上試一試,排除是語法的問題,MySQL上述語法可以成功.

於是 , 又回到Oracle,仔細查閱了Select into  from 與 insert into select 倆貨的相關知識.

1.insert into select 語句

語法:insert into 表B (field1,field2,……)select  value1,value2,……from 表A

注意:a.表B需要先建立,對應的屬性field1,field2……也對應存在.

           b.注意語法,不要加values(我師傅賣了個萌,加上了……,加上也沒用,哈哈),加values是執行單條插入語句的語法.

2. select into from 語句

語法:select value1,value2,…… into 表B from 表A

注意:表B事先不存在,插入時會自動建立.然後將表A中對應的欄位拷貝至表B中

然而,在MySQL中通通成立的在PL\SQL中傲嬌了,看到一篇帖子說報錯“ORA-00905:缺失關鍵字錯誤”,原因是T-SQL與PL\SQL的區別.

select..into is part of PL/SQL language which means you have to use it inside a PL/SQL block. You can not use it in a SQL statement outside of PL/SQL.
即不能單獨作為一條sql語句執行,一般在PL/SQL程式塊(block)中使用。

如果想在PL\SQL中實現上述功能,則需要寫成:

create 表B as  select  *  from 表A where rownum <= 500000;

表B事先不用建立,該句會自動建立.