将参数从shell脚本传递到SQL脚本

时间:2016-07-27 13:52:01

标签: oracle shell sqlplus ksh

我有一个ksh脚本,它调用一个名为report.sql的SQL脚本。

$ORACLE_HOME/bin/sqlplus swb/swb4gdeprod@gdeprod  @$reportHome/report.sql  

目前,此SQL脚本正在从数据库中获取sysdate的数据。

我想将日期作为输入传递给SQL脚本,以便它选择与该日期相对应的数据而不是sysdate。

如何将日期从ksh传递给SQL * Plus?

1 个答案:

答案 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'