BASH - SQL Where子句双引号内的单引号

时间:2009-09-11 15:35:09

标签: sql oracle bash plsql quoting

我需要在bash的命令行上向程序发送格式正确的日期比较WHERE子句。

一旦进入被调用的程序,WHERE子句应该对Oracle有效,并且看起来应该是这样的:

highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')

日期值在变量中。我尝试了各种引号和反斜杠的组合。而不是混淆问题并举出我的错误的例子,我希望得到一个原始的准确答案,没有被dreck玷污。

如果我在Perl中编写它,我认为这个任务看起来像这样:

$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";

如何在bash中实现相同的效果?

3 个答案:

答案 0 :(得分:3)

hiwaterval='11-Sep-2009'

where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"

如果要在当前shell中显示,请在最终变量设置之前添加“export”。

答案 1 :(得分:0)

您是否尝试过使用双蜱?喜欢highwater> TO_DATE('''11-Sep-2009'',''DD-MON-YYYY'')。只是一个建议。我还没试过。

答案 2 :(得分:0)

您可以像这样分配where子句:

export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`

(在echo语句周围有反引号 - 它们在我的编辑器中没有出现......)

使用以下形式的shell脚本:

sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS