将oracle refcursor转换为unix脚本中的文本

时间:2017-04-18 11:43:48

标签: oracle unix ksh

这是继续下面的帖子。我能够将数据从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

1 个答案:

答案 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