[oracle]如何将变量传递给 shell 脚本内部查询?

标签: shell Oracle
发布时间: 2014/3/9 17:27:03
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
while IFS=# read -r process_id source destination type
do
        echo "Process id: $process_id"
        echo "Source: $source"
        echo "Destination: $destination"
        case "$type" in
                2)
                echo "Type is outbound: $type"
                        contact=$(sqlplus -s ${SQLPLUS_INFO} <<EOF
                        SET PAGESIZE 0
                        SELECT email FROM table WHERE partner = '${destination}';
                        exit
                        EOF
                        )
                echo
                echo ${contact}
                echo
                ;;

大家好

根据上面的代码中,如何可以我传递值从 $destination 到查询?上面的示例中不工作,即使是这些其他的:

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

任何帮助将是很有帮助 !谢谢 !

解决方法 1:

当您运行脚本时,会发生什么 bash -x ?我问是因为这里文档表示法希望找到在行的开始的结束标记。当我运行这段代码:

#!/bin/bash

    contact=$(cat - <<EOF
    input from here document
    second line
    EOF
    )

echo "$contact"

得到了这样的错误:

eof.sh: line 3: unexpected EOF while looking for matching `)'
eof.sh: line 10: syntax error: unexpected end of file

如果行启动选项卡,你可以使用一个破折号之前的文件结束标记以指示应忽略前导的选项卡。

#!/bin/bash

        contact=$(cat - <<-EOF
        input from here document
        second line
        EOF
        )

echo "$contact"

此输出:

input from here document
second line

用空格替换这些选项卡,你回的语法错误。虽然我已经表达这方面的 bash ,我相信你也运行到科恩和伯恩壳同样的问题。

所以,我怀疑是你的问题有关在您的代码,这里文档的格式,但您应看到某种错误,所以我有点困惑。你应该去做你想要的替换:

#!/bin/bash

description="The Description"

        contact=$(cat - <<-EOF
        input from here document
        second line with '$description' embedded.
        EOF
        )

echo "$contact"

这将生成:

input from here document
second line with 'The Description' embedded.

使用 bash -x 可以帮助跟踪命令的执行。

所有这一切巧合地只与有关的 Oracle 和 SQL * 加上。

官方微信
官方QQ群
31647020