windows用批處理呼叫Oracle指令碼

2021-08-30 09:34:14 字數 3424 閱讀 7036

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。在命令提示下鍵入批處理檔案的名稱,或者雙...