簡體   English   中英

如何將變量從Windows批處理文件傳遞到SQL * Plus

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM