2014-03-07 58 views
4
覆蓋參數

我試圖從命令行參數傳遞到SQL * Plus腳本,通常它的工作原理類似:SQL * Plus命令行在Windows

sqlplus -s login/[email protected] @script.sql some_param 

和script.sql我可以使用引用參數符號,這樣的:

&1 

現在,我做它在Windows和兩個第一參數由「文件」字符串和glogin.sql中一些腳本路徑覆蓋 - 參數的其他工作正常。因此,例如,當我打電話sqlplus的那樣:

sqlplus -s login/[email protected] @script.sql par1 par2 par3 par4 

和腳本看起來像這樣:

prompt &1 
prompt &2 
prompt &3 
prompt &4 

我得到這樣的輸出:

Files 
(x86)\Oracle\product\11.1.0\client_1\\sqlplus\admin\glogin.sql 
par3 
par4 

任何想法是怎麼回事?

+0

我無法重現您的問題 - 我在Windows XP上,oracle 11gR2,並且4個參數都正確顯示。 – Emmanuel

+0

看起來問題在於dist上的sqlplus路徑 - 它安裝在「C:\ Program Files(x86)\ Oracle \ product \ 11.1.0 \ client_1 \ BIN」上,並且&1和&2的值是路徑部分乘太空。仍然不知道我能用這個做什麼。 – WojtusJ

回答

3

我試圖重現與SQL的原生版本* Plus中與我的Oracle 11gR2中來了,我不能重現:

dummy.sql腳本:

prompt &1 
prompt &2 
prompt &3 
prompt &4 

select 1 a from dual; 

exit 

輸出:

E:\CFM\Dev\SQL>sqlplus -s guest/[email protected] @dummy.sql 1 2 3 4 
1 
2 
3 
4 

     A 
---------- 
     1 


E:\CFM\Dev\SQL> 

我的第一次嘗試將是:

  • 是你原生的sqlplus可執行文件(還是一種手工批處理)?
  • 什麼是您的操作系統?

更新:在您的意見後,我想glogin.sql必須以某種方式作爲一個命令參數調用,但沒有引號左右。我的測試工程,但客戶端安裝在C:\oracle(無空白),這可能是爲什麼它適用於我...

我會做的是重新安裝您的客戶端在一個目錄沒有空白(爲什麼不C:\oracle)因爲我認爲這可以解決你的問題。

+0

我正在使用Windows 7,SQL * Plus是一個本地的(我正在執行一個sqlplus.exe)。我不知道它是否可以連接,但SQL * Plus的路徑是: 「C:\ Program Files(x86)\ Oracle \ product \ 11.1.0 \ client_1 \ BIN」 所以它看起來像&1是「文件」來自路徑,&2來自該路徑以及「(x86)\ Oracle \ product \ 11.1.0 \ client_1 \ BIN」。它只是由空格隔開...... – WojtusJ

+0

看到我的編輯,我認爲重新安裝客戶端可能會解決您的問題... – Emmanuel

+1

根據11g SQL * Plus文檔,glogin.sql文件在您啓動SQL時運行*加。具體來說,這個文件在這裏:$ ORACLE_HOME/sqlplus/admin/glogin.sql。因此,它試圖運行glogin.sql腳本,並且「Program Files」中的空間讓事情變得糟糕。也許修改你的ORACLE_HOME環境變量來包含引號,或許可以調用glogin.sql。如果這個調用不起作用,那麼我會按照Emmanuel的建議重新安裝。 –