oracle 使用spoo生成sql指令碼
阿新 • • 發佈:2019-01-28
如果表table1和table2中id值相等,那麼用table1中的value值更新table2中的value值。
下面是通過spool功能生成update語句指令碼,可以建立*.sql指令碼執行下面命令或者直接複製在command命令列執行。-------------------------------------------------------------------------
set pagesize 0; //輸出每頁行數,預設為24,為了避免分頁,可設定為0。
set feedback off;//回顯本次sql命令處理的記錄條數,預設為on
set termout off;//顯示指令碼中的命令的執行結果,預設為on
set linesize 600//輸出一行字元個數,預設為80
col exportData for a1000;
select 'prompt version 1.0' from dual;
select 'SET DEFINE OFF' from dual;
drop table temp_sxh;
create table temp_sxh as with t1 as (
select id as id,
value as value
from table1 a
where a.id in (select id from table2))
select a1, a2 from t1;
spool E:\work\temp_sxh.sql; //生成指令碼路徑和檔名,該命令放在要生成得到的語句前
select 'update table2 a set a.value =' ||
''''|| b.value || ''''||
'where a.id = ' ||
''''|| b.id ||''''|| ';' from temp_sxh b;
drop table temp_sxh;
select 'commit;' from dual;
spool off;
set termout on; //去除標準輸出每行的拖尾空格,預設為off
--------------------------------------------------------------------
此指令碼執行後會生成temp_sxh.sql指令碼檔案,其中內容為:
update table2 a set a.value ='100' where a.id = '100000';
update table2 a set a.value ='101' where a.id = '100001';
....
update table2 a set a.value ='101' where a.id = 'n00000';
commit;
如果沒有關聯資訊,那麼生成的temp_sxh.sql指令碼檔案,內容只有
commit;