2017-02-01 74 views
0

我需要動態給出假脫機文件名,並且在調用sqlplus時必須傳遞參數。下面是我試過的sqlplus動態假脫機文件名

echo exit | sqlplus "{{ Oracle_username }}/ {{ Oracle_pwd}} @(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host={{ Oracle_HostName }})(Port=1521))(CONNECT_DATA=(SID= {{Oracle_SID }})))" @Script.sql 'AppName' 'DatabaseName' 'ObjectType' 

在這裏,我嘗試動態地傳遞應用名稱,數據庫名稱和對象類型。在此之前運行SQLPLUS一步,我動態創建的文件夾(應用程序名稱,數據庫名稱,對象類型的所有文件夾,它會根據每個應用而有所不同)。下面是我的script.sql看起來像:

SPOOL &&AppName/&&DatabaseName/&&ObjectType/Output.csv 
    <<SQL Script>> 
    SPOOL OFF 

這努力工作。有人能告訴我需要改變什麼嗎?

+0

什麼是「不工作」的意思是 - 會發生什麼?你是否在某處定義了替代變量? –

+0

當我通過傳遞參數像上面那樣後臺打印時,輸出不會被導出。沒有參數,當我執行腳本時,它就可以工作。例如:SPOOL AppName/Databasename/Output.csv。我正在運行Ansible playbook的所有這些步驟。我將在一個單獨的var文件中聲明所有這些值。 –

回答

0

你傳入要形成你的後臺打印文件路徑和名稱作爲參數傳遞給腳本中的值,但是你需要把它們稱爲位置參數:

SPOOL &1/&2/&3/Output.csv 

或者,如果你要重用他們別的東西,你可以定義自己的變量,從位置參數設置:

DEFINE AppName=&1 
DEFINE DatabaseName=&2 
DEFINE ObjectType=&3 

SPOOL &&AppName/&&DatabaseName/&&ObjectType/Output.csv 

的後臺打印文件的路徑將是相對於你,當你運行該腳本所在的目錄。如果這不是你想要的,那麼將根放在spool命令中的第一個替換變量之前,無論使用哪種形式。


你也可以包括exit.sql文件,這樣就不必附和它;並且可以使用TNS別名而不是在命令行上傳遞所有連接信息 - 或者如果可以使用服務名稱而不是SID,則可以使用簡單連接語法,該語法稍微簡單一些:

sqlplus username/[email protected]//hostname:1521/service_name @Script.sql 'AppName' 'DatabaseName' 'ObjectType' 
+0

@@亞歷克斯 - 這似乎並沒有解決我的問題。我希望它完全自動化,所以我給了SPOOL && 1/&& 2/&& 3/Output.csv選項,然後通過sqlplus傳遞參數(與上面相同)。但輸出不會導出。目前,我正在使用Ansible執行所有操作,所以我沒有在TNS中添加任何細節。 –

0

設置你的應用程序的名字,DBNAME,OBJECTTYPE的是環境變量,然後嘗試像下面

[[email protected] ~]$ export app_name=/stage 
[[email protected] ~]$ export database_name=PSES 
[[email protected] ~]$ sqlplus/as sysdba 

SQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 1 12:04:08 2017 

Copyright (c) 1982, 2011, Oracle. All rights reserved. 

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> spool $app_name/$database_name/out.csv 
SQL> select * from dual; 

D 
- 
X 

SQL> spool off; 
SQL> exit 
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 

[[email protected] ~]$ ls -l /stage/PSES/out.csv 
-rw-r-----. 1 oracle oinstall 286 Feb 1 12:04 /stage/PSES/out.csv 
+0

@@ Jayaprakash - 根據我的要求,我不能將其設置爲環境變量。我必須跨多個數據庫運行SQL腳本,並將每個輸出保存在不同的文件夾中。這就是我在Spool中給出動態參數的原因。它必須是全自動的。所以使用&& AppName –

相關問題