在unix上使用SQL查询

时间:2013-01-28 10:21:55

标签: oracle shell unix sqlplus

  

可能重复:
  Select columns into local variable from sql script using shell script

我正在尝试编写一个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的语法?

感谢 阿萨夫。

2 个答案:

答案 0 :(得分: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纠正。

答案 1 :(得分:0)

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

更重要的是,虽然查询中没有终止;,因此SQL * Plus不会执行它 - 它只是在没有输出的情况下退出。

如果您在SQL * Plus命令提示符下键入原始查询,它会让您进一步提示等待输入,如果您再次点击return,则返回正常提示,而不实际执行查询:

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`