Oracle 如何在shell脚本中向查询传递变量?

Oracle 如何在shell脚本中向查询传递变量?,oracle,shell,sqlplus,Oracle,Shell,Sqlplus,请尝试删除变量周围的单引号:它们阻止解释变量(与双引号相反) 这应该是: SELECT email FROM table WHERE partner = '"${destination}"'; SELECT email FROM table WHERE partner = '$destination'; 请尝试删除变量周围的单引号:它们阻止解释变量(与双引号相反) 这应该是: SELECT email FROM table WHERE partner = '"${destination}"';

请尝试删除变量周围的单引号:它们阻止解释变量(与双引号相反)

这应该是:

SELECT email FROM table WHERE partner = '"${destination}"';
SELECT email FROM table WHERE partner = '$destination';

请尝试删除变量周围的单引号:它们阻止解释变量(与双引号相反)

这应该是:

SELECT email FROM table WHERE partner = '"${destination}"';
SELECT email FROM table WHERE partner = '$destination';

使用
bash-x
运行脚本时会发生什么?我这样问是因为here文档符号希望在一行的开头找到结束标记。当我运行此代码时:

SELECT email FROM table WHERE partner = ${destination};
如果行以制表符开头,可以在文件结尾标记前使用破折号指示应忽略前导制表符

eof.sh: line 3: unexpected EOF while looking for matching `)'
eof.sh: line 10: syntax error: unexpected end of file
将这些选项卡替换为空白,您将返回到语法错误中。虽然我已经用bash的
bash
表达了这一点,但我相信你在Korn和Bourne shells上也遇到了同样的问题

所以,我怀疑您的问题与代码中here文档的格式有关,但是您应该看到某种错误,所以我有点困惑。你应该得到你想要的替代品:

input from here document
second line
使用
bash-x
有助于跟踪命令的执行


所有这些都与Oracle和SQL*Plus有关。

使用
bash-x运行脚本时会发生什么?我这样问是因为here文档符号希望在一行的开头找到结束标记。当我运行此代码时:

SELECT email FROM table WHERE partner = ${destination};
如果行以制表符开头,可以在文件结尾标记前使用破折号指示应忽略前导制表符

eof.sh: line 3: unexpected EOF while looking for matching `)'
eof.sh: line 10: syntax error: unexpected end of file
将这些选项卡替换为空白,您将返回到语法错误中。虽然我已经用bash的
bash
表达了这一点,但我相信你在Korn和Bourne shells上也遇到了同样的问题

所以,我怀疑您的问题与代码中here文档的格式有关,但是您应该看到某种错误,所以我有点困惑。你应该得到你想要的替代品:

input from here document
second line
使用
bash-x
有助于跟踪命令的执行


所有这些都只是巧合地与Oracle和SQL*Plus有关。

现在它返回了:从partner=X的表中选择电子邮件;第1行的script.sh result.csv SELECT.sql错误:ORA-00904:“X”:无效标识符不起作用,但感谢您的建议。sql要求文本值用单引号括起来。现在它返回:从partner=X的表中选择电子邮件;第1行的script.sh result.csv SELECT.sql错误:ORA-00904:“X”:无效标识符无效,但感谢您的建议。sql要求文本值用单引号括起来。取出
联系人=$(
,看看这是否是问题的根源。我希望它能按原样工作,但命令子位置(
$(…)
)可能会有问题。祝你好运。另外,在调用
联系人=$(..)
之前添加
导出目的地。祝你好运。contact=sqlplus-s${sqlplus_INFO}不,我的意思是拿chars
contact=$(
(仅限)。在EOF之后添加一个
exit
语句,看看
sqlplus是否取出
contact=$(
,看看这是否是问题的根源。我希望它能按原样工作,但命令子位置(
$(…)
)可能会有问题。祝你好运。另外,在调用
联系人=$(..)
之前添加
导出目的地。祝你好运。contact=sqlplus-s${sqlplus_INFO}不,我的意思是接受chars
contact=$(
(仅限)。在EOF之后添加一个
exit
语句,看看
sqlplus我想我是否发现了bash-x+echo'Destination:x'Destination:x+case“$type”的问题in+echo'类型为出站:2'类型为出站:2++sqlplus-s用户/pass@EDDB+contact='no rows selected'+echo+echo no rows selected no rows selected+echo查询返回大量空格:+echo'Destination:x'我想我发现了bash的问题-x+echo'Destination:x'目标:x+案例“$type”在+echo”类型中为出站:2”类型为出站:2++sqlplus-s用户/pass@EDDB+contact='no rows selected'+echo+echo no rows selected no rows selected+echo查询返回大量空格:+echo'Destination:x'
input from here document
second line with 'The Description' embedded.