UNIX中的SQL select语句在IF..THEN语句内/内

时间:2008-11-11 21:41:14

标签: oracle unix shell sqlplus

我只想问一下尝试在UNIX内/内IF..THEN..FI语句中创建一个简单的SQL select语句时的步骤。

我知道如何在SQL * Plus中使用'select'和'if..then'语句,但是我在使用UNIX脚本指向变量时遇到困难:如果'ABC'为'选择.. 。“

实施例

如果[“$?” ='ABC'] 然后     SELECT employeesid,name,age FROM tablename; 其他     退出1 网络

如果[“$?” ='XYZ'] 然后     SELECT employeesid,name,age FROM tablename; 其他     退出1 网络

如何更正确地将它放在UNIX脚本中,并且正确到位?

感谢。

4 个答案:

答案 0 :(得分:4)

这听起来像是在尝试将SQLPlus嵌入到shell脚本中。从记忆中,咒语应该类似于:

if [ $? -eq ABC ]; then
SQLPLUS /S USER/PASS@Instance <<EOF
SET echo off;
SET pagesize 0;
SET heading off;
SPOOL foo.out
select foo from bar
EOF
fi

SQLPLUS和EOF之间的所有内容都传递给SQLPlus,因此我们有一些语句来控制格式(您可能需要不同的格式)和实际查询。 SQLPlus脚本中的SPOOL命令将输出发送到文件。有关使用SQLPlus的更详细文档,您可以从Oracle's web site.

下载它们

答案 1 :(得分:1)

请记住,echo是您的朋友。

if [ "$?" = "ABC" ] then echo SELECT employid, name, age FROM tablename; else exit 1; fi

您可以嵌入shell脚本变量等。小心需要引用shell想要操作的东西,比如引号和分号。

答案 2 :(得分:1)

您是否考虑过使用包含数据库连接功能的perl或其他脚本语言。这样就可以避免使用笨重的shell脚本/ SQL * Plus链接

答案 3 :(得分:0)

上面的答案还可以。但是,我知道,在shell脚本中使用SQLPlus,遗憾的是,我不需要SQLPlus脚本将输出发送到文件。换句话说:有没有其他方法可以做到这一点,只需将输出打印到日志?