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

在unix脚本中将oracle refcursor转换为文本,oracle,unix,ksh,Oracle,Unix,Ksh,这是下文的延续。我能够将数据从oracle存储过程返回到unix脚本。 但是在循环浏览记录时,我没有得到预期的结果。下面是代码。在打印变量表之前,我收到一个错误“无法打开” weeknum=$1 #从proc读取ref游标 cur=`sqlplus-s$connection您正试图从cur变量直接输入,但您使用的表单正在查找具有$cur中第一个单词名称的文件,而不是该变量的全部内容。您看到的错误将是过程打开的ref游标第一行第一列中的第一个字 因此,如果为某个查询打开了ref游标,该查询生成了

这是下文的延续。我能够将数据从oracle存储过程返回到unix脚本。

但是在循环浏览记录时,我没有得到预期的结果。下面是代码。在打印变量表之前,我收到一个错误
“无法打开”

weeknum=$1
#从proc读取ref游标

cur=`sqlplus-s$connection您正试图从
cur
变量直接输入,但您使用的表单正在查找具有
$cur
中第一个单词名称的文件,而不是该变量的全部内容。您看到的错误将是过程打开的ref游标第一行第一列中的第一个字

因此,如果为某个查询打开了ref游标,该查询生成了三行输出值a、B和C,它将尝试从名为a的文件中读取输入,而report
无法打开(除非当前工作目录中碰巧存在名为a的文件)

您可以回送变量并将其管道化:

echo "$cur" | while read -r line
do
  table=$table"\n"$line
done
我已经从作业中删除了额外的
$
符号。但这看起来并不是特别有用;使用与上述相同的三行结果,
$table
将以以下形式结束:

\nA\nB\nC
如果您只想将
$cur
的内容打印到控制台,您可以使用以下选项之一(或其他选项):

两者都生产什么

A
B
C

谢谢成功了。我需要将此数据作为邮件正文发送。这是一个很好的解决方案。想知道如何在$cur中迭代一行中的每一列。希望是断章取义:)
echo "$cur"
printf "%s\n" "$cur"
A
B
C