[英]How to pass a variable from a Windows Batch File to SQL*Plus
我想將Windows批處理文件中的變量傳遞給SQLPLUS,同時顯示sql結果,批處理變量應與sql結果一起打印。
結果應存儲在csv文件中。
我怎樣才能做到這一點。
在Unix(shell腳本)中這是可能的,如何在Windows(批處理腳本)中做到這一點。
我想將變量從Windows批處理文件傳遞到SQLPLUS
只需將其作為參數傳遞給SQL腳本即可。 並以與參數列表&1 &2...
相同的順序使用替換變量&1 &2...
例如,
mybatchfile.BAT:
sqlplus -S username/password@sid
@c:\sql\mysqlfile.sql 1000 7369
mysqlfile.SQL:
update emp set sal = &1 where empno = &2
在顯示sql結果時,批處理變量應與sql結果一起打印。
要顯示作為參數傳遞給SQL腳本的變量,首先需要定義綁定變量,然后分配參數值,然后打印該值。
例如,
我有test.sql:
對於NUMBER類型
-- 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.