0

可能重复:
使用 shell 脚本从 sql 脚本中选择列到局部变量中

我正在尝试编写一个 unix 脚本,该脚本将使用 sql 查询检索参数,然后使用此参数运行脚本。目前,我只是试图让它回显检索到的参数。在 toad (oracle 8) 上运行良好的 sql 查询是:

select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043    

上面的查询给出了一个数字。

现在我写的脚本是:

#!/bin/bash

echo "this script will print the billcycle date"

v_bc=`sqlplus -s /@bscsprod <<EOF
select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043`

echo "billcycle number is $v_bc" 

我运行文件时的结果是

billcycle number is

后面没有数字。

有什么想法有什么问题吗?也许是连接到 sql server 的语法?

谢谢阿萨夫。

4

2 回答 2

0

我认为你也应该以 EOF 结尾:

v_bc=`sqlplus -s /@bscsprod <<EOF
select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043
EOF`

编辑:糟糕,由 Alex Poole 更正。

于 2013-01-28T10:29:16.750 回答
0

链接到的重复问题 APC 显示了一个工作示例,但为了澄清您有两个问题。第一个是非致命的,只是你没有EOF,正如 Rembunator 指出的那样(尽管它在那个答案中的位置错误)

更重要的是,尽管您的查询没有终止;,所以 SQL*Plus 不会执行它 - 它只是退出而没有输出。

如果您在 SQL*Plus 命令提示符下键入原始查询,它将让您在进一步的提示符处等待输入,然后如果您再次按回车键,则返回到正常提示符,而不实际执行查询:

SQL> select billcycle from bc_run
  2  where billcycle not in (50,16)
  3  and control_group_ind is null
  4  and billseqno=6043
  5
SQL> 

您可能还需要至少一些输出格式。所以这应该工作:

v_bc=`sqlplus -s /@bscsprod <<EOF
set pagesize 0
select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043;
EOF`
于 2013-01-28T10:56:33.167 回答