我有一个ksh脚本,它调用一个名为report.sql
的SQL脚本。
$ORACLE_HOME/bin/sqlplus swb/swb4gdeprod@gdeprod @$reportHome/report.sql
目前,此SQL脚本正在从数据库中获取sysdate的数据。
我想将日期作为输入传递给SQL脚本,以便它选择与该日期相对应的数据而不是sysdate。
如何将日期从ksh传递给SQL * Plus?
答案 0 :(得分:1)
With substitution variables; start
相当于@
。
您尚未显示您的报告包含的SQL,但在某些时候假设您有类似的内容:
where some_col > trunc(sysdate)
您可以将其更改为:
where some_col > to_date('&1', 'YYYY-MM-DD')
然后在命令行上以相同格式传递日期字符串:
$ORACLE_HOME/bin/sqlplus swb/swb4gdeprod@gdeprod @$reportHome/report.sql 2016-07-27
您传入的值,例如2016-07-27
是第一个位置参数,因此可以使用&1
将其引用为替换变量。因为它是一个字符串,当您在SQL中引用它时必须用单引号括起来。因为它是一个字符串,你必须将它转换为日期。您传入的字符串格式必须与您使用to_date()
函数指定的格式相匹配。
也要小心传递月份名称,因为您可能会在某些时候遇到语言问题,理想情况下您会使用明确无误的格式。我已经使用了ISO格式YYYY-MM-DD,如果你坚持使用它,你也可以使用a date literal,因为在SQL引擎解释它之前,SQL * Plus将完成替换:
where some_col > date '&1'