1. 程式人生 > >oracle 使用spoo生成sql指令碼

oracle 使用spoo生成sql指令碼

如果表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;