2015-04-02 93 views
2

我想將Windows批處理文件中的變量傳遞給SQLPLUS, ,同時顯示sql結果批處理變量應該與sql結果一起打印。如何將Windows批處理文件中的變量傳遞給SQL * Plus

結果應該存儲在csv文件中。

我該怎麼做。

這可能在Unix(shell腳本)中,我怎麼能在Windows(批處理腳本)中做到這一點。

+0

只是把它作爲一個**參數SQL腳本**和使用'替代variables'。並將結果集存儲爲CSV文件,使用'SPOOL'和格式爲'set colsep', – 2015-04-02 05:16:09

回答

3

我想從Windows批處理文件傳遞變量爲sqlplus,

它只是作爲參數傳遞到SQL腳本。而使用置換變量以相同的順序將參數列表&1 &2...

例如,

mybatchfile.BAT的:

sqlplus -S username/[email protected] 
@c:\sql\mysqlfile.sql 1000 7369 

mysqlfile.SQL:

update emp set sal = &1 where empno = &2 

whi顯示sql結果批量變量應該與sql結果一起打印。

要顯示作爲參數傳遞給SQL腳本的變量,首先需要定義綁定變量,然後分配參數值並打印值。

例如,

我有TEST.SQL:

對於號碼類型

-- define the bind variable 
var sal number 

-- assign the first argument's value 
exec :sal := &1 

-- display the value 
print :sal 

-- define the bind variable 
var empno number 

-- assign the second argument's value 
exec :empno := &2 

-- display the value  
print :empno 

現在,讓我們來測試腳本:

SQL> @D:\test.sql 1000 7369 

PL/SQL procedure successfully completed. 


     SAL 
---------- 
     1000 


PL/SQL procedure successfully completed. 


    EMPNO 
---------- 
     7369 

SQL> 

對於STRING型

-- define the bind variable 
var ename varchar2(10) 

-- assign the argument's value 
exec :ename := '&1' 

-- display the value 
print :ename 

現在,讓我們來測試腳本:

SQL> @D:\test.sql LALIT 

PL/SQL procedure successfully completed. 


ENAME 
-------------------------------- 
LALIT 

SQL> 

結果應存儲在csv文件。

在SQL腳本中處理此操作。使用適當的SQL * Plus格式爲逗號分隔結果。存儲結果集,你只需要SPOOL

例如,

set colsep ,  -- separate columns with a comma 
set pagesize 0 -- No headers 
set trimspool on -- remove trailing blanks 

spool mycsvfile.csv 

SELECT .... 

spool off 
+0

我不想使用它們到查詢中,我只是想顯示該變量。就像說變量是我想在sql輸出中顯示的字符串。 – angel 2015-04-02 05:42:05

+0

查看已更新的答案。我已經添加了一個如何顯示參數值的示例。請標記爲已回答,也會幫助其他人。 – 2015-04-02 05:59:47

+0

感謝您lalit其工作.. :) – angel 2015-04-02 06:30:03

相關問題