我有一個ksh腳本調用一個名爲report.sql
的SQL腳本。將參數從shell腳本傳遞到SQL腳本
$ORACLE_HOME/bin/sqlplus swb/[email protected] @$reportHome/report.sql
當前此SQL腳本正在從數據庫中獲取sysdate的數據。
我想將一個日期作爲輸入傳遞給SQL腳本,以便它選擇與該日期對應的數據而不是sysdate。
如何將ksh的日期傳遞給SQL * Plus?
我有一個ksh腳本調用一個名爲report.sql
的SQL腳本。將參數從shell腳本傳遞到SQL腳本
$ORACLE_HOME/bin/sqlplus swb/[email protected] @$reportHome/report.sql
當前此SQL腳本正在從數據庫中獲取sysdate的數據。
我想將一個日期作爲輸入傳遞給SQL腳本,以便它選擇與該日期對應的數據而不是sysdate。
如何將ksh的日期傳遞給SQL * Plus?
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'