spool時間的sql指令碼:
spool time.txt
select sysdate from dual; ----獲取系統時間
spool off exit
檔案命名為time.sql,儲存在d盤根目錄下。
bat檔案:
命名為test.bat sqlplus life/life_pwd@o122g4 @d:time.sql
執行完成後,產生乙個time.txt檔案:
那麼執行多個sql指令碼該怎麼處理呢?下面做個例項:我們需要刪除多個表,首先判斷表是否存在,不存在的話直接create,否則drop table,這裡有三個任務(createcontractmaster.sql/createcontractproduct.sql/creategroupproduct.sql);
一 準備sql指令碼:
1.createcontractmaster.sql:
spool contractmst.log
declare
m_count number;
if exists(select count(1) into m_count from all_all_tables where table_name = upper('t_contract_master')) then
drop table t_contract_master;
else
create table t_contract_master(
pol_id number(10),
pol_code varchar2(20),
create_user varchar2(10),
create_date date,
update_user varchar2(10),
update_time date
);end if;
spool off
exit;
2.createcontractproduct.sql:
spool contractprod.log
declare
m_count number;
if exists(select count(1) into m_count from all_all_tables where table_name = upper('t_contract_product')) then
drop table t_contract_product;
else
create table t_contract_product(
prd_id number(10),
prd_name varchar2(20),
pol_id number(10),
create_user varchar2(10),
create_date date,
update_user varchar2(10),
update_time date
);end if;
spool off
exit;
3.creategroupproduct.sql:
spool groupprd.log
declare
m_count number;
if exists(select count(1) into m_count from all_all_tables where table_name = upper('t_group_product')) then
drop table t_group_product;
else
create table t_group_product(
prd_id number(10),
pol_id number(10),
create_user varchar2(10),
create_date date,
update_user varchar2(10),
update_time date
);end if;
spool off
exit;
二 編寫批處理命令檔案(execsql.bat):批處理命令檔案與sql指令碼最好放置在同一目錄下,這樣,可以設定成相對路徑。否則,用絕對路徑在執行時可能比較麻煩。
execsal.bat:
sqlplus life/life_pwd@o122g4;
@createcontractmaster.sql
@createcontractproduct.sql
@creategroupproduct.sql
exit;
當然,通常會把所有的指令碼重新用乙個sql指令碼組合起來,然後用批處理命令呼叫這個sql指令碼即可。
注意:如果是需要傳遞值,直接將引數放到spool的指令碼中。
set termout off ----顯示指令碼中的命令的執行結果,預設為on
set newpage 1
set space 0
set pagesize 0 --輸出每頁行數,預設為24,為了避免分頁,可設定為0。
set echo off ---顯示start啟動的指令碼中的每個sql命令,預設為on
set feedback off --回顯本次sql命令處理的記錄條數,預設為on
set verify off --設定是否顯示替代變數被替代前後的語句
set heading off ---輸出域標題,預設為on
set markup html off ---html 元素標籤開關 開啟
spool off
set trimspool on ---去除重定向(spool)輸出每行的拖尾空格,預設為off
set trimout on ---去除標準輸出每行的拖尾空格,預設為off
-- spool 到當前目錄中
spool output.tmp
spool off
-- 構造查詢語句
@@output.tmp
set colsep' ' ---域輸出分隔符
當然,還有一種方法,就是用vba產生指令碼。以下指令碼沒有驗證過!
dim wshshell, oexec
set wshshell = createobject("wscript.shell")'建立指令碼物件
set oexec = wshshell.exec("sqlplus -s life/life@o122g4 @d:\a.sql")'-s是不回顯,然後跟使用者名稱和密碼,之後是sql語句路徑
set oexec = wshshell.exec("sqlplus -s scott/tiger @d:\b.sql")
Windows批處理(一)
批處理是一系列可執行的命令集合揉成的乙個檔案,有點類似於日常開發中的乙個類。window平台下批處理副檔名一般為bat或者cmd 先介紹幾個簡單的命令 這是注釋命令,和開發中的 效果是一樣的,都是單行注釋。有效標號 冒號後面跟乙個變數字串,一般用於goto語句的跳轉。例如 functiona 和 a...
Windows批處理(二)
前一篇我們差不多就講了乙個hello world難度的指令碼,現在我們來新學三個平常一定會用到的概念。變數 條件分支判斷和跳轉 在bat指令碼中,變數是特別常用的。我們可以這麼申明乙個變數。set param hello set param hello world set parm a b 解釋 申...
Windows批處理命令
在工作當中經常遇到一些重複性 有著相似處理流程的事情需要處理,如果每次都是手動操作會非常繁重 乏味。這時可以考慮一下是否可以通過一些常用的批處理命令來處理,以便提高效率。批處理檔案是無格式的文字檔案,它包含一條或多條命令。它的擴充套件名為 bat 或 cmd。在命令提示下鍵入批處理檔案的名稱,或者雙...