【问题标题】:Pass parameter from shell script to SQL script将参数从 shell 脚本传递到 SQL 脚本
【发布时间】:2016-12-01 13:55:30
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: oracle shell sqlplus ksh


    【解决方案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'
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2020-12-31
      相关资源
      最近更新 更多