从UNIX Shell脚本调用SQL * PLUS并打印有关查询的状态消息

时间:2014-06-29 21:53:18

标签: sql unix sh

我想使用shell脚本运行SQL代码,并返回SQL查询是否成功执行的消息。为此,我使用了下面给出的unix脚本。

#!/bin/sh          

sqlplus -S hr/hr@xe<<EOF

@emp.sql

EOF

var1=$(cat /cygdrive/d/scripts/output.txt | grep -c 'COUNT')

if [ $var1 -ge 1 ];

then

echo "success"

else

echo "failure"

fi

exit;

和emp.sql(称为sql文件)为

SET ECHO OFF

SPOOL D:\scripts\output.txt

SET LINESIZE 100

SET PAGESIZE 50

SELECT count(*) FROM employees;

SPOOL OFF;

EXIT 0;

当我执行脚本时,我输出为

COUNT(*)
----------
   107
./script1.sh: line 13: syntax error: unexpected end of file.

我不知道应该把EOF声明准确地放在哪里。此外,我没有得到状态消息,无论是成功还是失败,我想作为输出。请帮忙。提前致谢

1 个答案:

答案 0 :(得分:0)

SPOOL D:\scripts\output.txt不是这种Windows引用文件的方式,在shell脚本中,您将文件称为/cygdrive/d/scripts/output.txt。我假设你使用linux shell执行所以我执行你的脚本更改sql文件中的假脱机行。它工作正常。

编辑:对于假脱机的\路径,您使用的output.txt也将导致sqlplus终止。因此错误line 13: syntax error: unexpected end of file.可能会在路径中添加引号或使用与shell中使用的文件路径相同的文件路径