这是继续下面的帖子。我能够将数据从oracle存储过程返回到unix脚本。 Fetch data from Oracle SP Out Param SYS_REFCURSOR in Unix Korn Shell Script
但是在循环记录时我没有得到预期的结果。下面是代码。在打印变量表格之前,我收到错误"cannot open"
weeknum=$1
#read ref cursor from proc
cur=`sqlplus -s $connection <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
var return_val refcursor
exec WEEKLYLOAD($weeknum, :return_val);
print return_val
EXIT
EOF`
print "done"
table=""
while read -r line
do
$table=$$table"\n"$line
done < $cur
答案 0 :(得分:1)
您正试图从cur
变量中引导输入,但您正在使用的表单正在寻找一个文件,其中包含$cur
中第一个单词的名称 - 而不是该文件的全部内容变量。您看到的错误将是您的过程打开的引用游标的第一行第一列中的第一个单词。
因此,如果为查询打开了引用游标,例如,生成了三行输出,其值为A,B和C,它将尝试从名为A的文件中读取输入,并报告cannot open
(除非一个名为恰好存在于当前工作目录中的文件。)
您可以回显该变量并改为管道:
echo "$cur" | while read -r line
do
table=$table"\n"$line
done
我已从作业中删除了额外的$
符号。但这看起来并不特别有用;如上所述的三行结果,$table
将最终为:
\nA\nB\nC
如果您只想将$cur
的内容打印到控制台,可以使用其中一种(或其他):
echo "$cur"
printf "%s\n" "$cur"
两者都产生
A
B
C