2016-07-27 198 views
0

我有一個ksh腳本調用一個名爲report.sql的SQL腳本。將參數從shell腳本傳遞到SQL腳本

$ORACLE_HOME/bin/sqlplus swb/[email protected] @$reportHome/report.sql 

當前此SQL腳本正在從數據庫中獲取sysdate的數據。

我想將一個日期作爲輸入傳遞給SQL腳本,以便它選擇與該日期對應的數據而不是sysdate。

如何將ksh的日期傳遞給SQL * Plus?

回答

0

With substitution variables; start這裏相當於@

您還沒有表現出您的報告中包含的SQL,但在某些時候假設你有這樣的:

where some_col > trunc(sysdate) 

你會改變,要:

where some_col > to_date('&1', 'YYYY-MM-DD') 

,然後通過一個日期字符串在命令行上使用相同的格式

$ORACLE_HOME/bin/sqlplus swb/[email protected] @$reportHome/report.sql 2016-07-27 

您傳入的值,例如2016-07-27,是第一個位置參數,因此可以使用&1作爲替代變量引用它。因爲它是一個字符串,在SQL中引用時必須用單引號括起來。而因爲它是一個字符串,你必須將它轉換爲日期。您傳遞的字符串格式必須與您指定的格式與to_date()函數相匹配。

還要小心傳遞月份名稱,因爲在某些時候您可能會遇到語言問題,理想情況下您會使用明確的格式。我已經使用了ISO格式YYYY-MM-DD,如果你堅持,你也可以使用a date literal作爲替代將SQL來完成*再加上它是由SQL引擎解釋之前:

where some_col > date '&1'