在實際生產中有時我們需要將一張表的數據導入到另外一張表,如果有PLSQL,我們可以通過PLSQL工具將數據導出為sql腳本,然后再在另外一個數據庫中執行這個腳本。但有時在實際生產中我們沒有PLSQL這個工具,而且PLSQL的導出工具也不是特別好用。這時我們可以通過sqlplus中的spool工具,將我們需要的數據導出為sql建表腳本。
spool工具是將我們在sqlplus中的輸出寫入自己需要的文件中,如此也就是說,我們通過查詢,將查詢結果輸出為建表語句,然后將這些語句輸出到sql腳本中即可。
假設我們有一個pay1表,里面有“ID”,“NAME”,“AMOUNT”3個字段,我們需要將這個表的數據導出為pay2表的插入語句。具體實現如下:
在sqlplus中依次執行下面語句
set heading off set feedback off set term off
這一部分是對spool 的寫入數據進行控制
spool d:\sql\pay.sql ---將結果寫入到pay.sql中
select 'INSERT INTO pay2 (id2,nam2,amount2) VALUES('||chr(39)||ID||chr(39)||','||chr(39)||NAME||chr(39)||','||chr(39)||AMOUNT||chr(39)||');' FROM pay1 order by ID;
這是配插入語句的。其中 || 是拼接符,將字符串和字段連接起來;chr(39)是Unicode字符中的單引號,由於無法進行轉義,所以用chr(39)代替;兩個單引號中間的逗號是字符串;ID、NAME、AMOUNT是pay1表的字段;id2、nam2、amount2是pay2表的字段。由於配插入語句較為麻煩,所以建議在其他地方寫完之后再復制粘貼到sqlplus中,注意中間不要有換行符。
spool off ----輸入這句之后才會將結果寫入到pay.sql中,否則pay.sql是空的
由於spool會將所有信息都寫入到pay.sql中,所以pay.sql會有一些多余的信息不能直接使用,需要對其進行修改之后再使用。但我認為這個修改是可以避免的,由於我本人對spool不是特別了解,所以希望有對spool了解的朋友能在評論區告知一二。