2016-07-27 134 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' 
相关问题