将 oracle refcursor 转换为 unix 脚本中的文本
convert oracle refcursor to text in unix script
这是下面 post 的延续。我能够 return 从 oracle 存储过程到 unix 脚本的数据。
Fetch data from Oracle SP Out Param SYS_REFCURSOR in Unix Korn Shell Script
但是在遍历记录时我没有得到预期的结果。下面是代码。在打印变量 table 之前我收到一个错误 "cannot open"
weeknum=
#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
您正在尝试从您的 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
这是下面 post 的延续。我能够 return 从 oracle 存储过程到 unix 脚本的数据。 Fetch data from Oracle SP Out Param SYS_REFCURSOR in Unix Korn Shell Script
但是在遍历记录时我没有得到预期的结果。下面是代码。在打印变量 table 之前我收到一个错误 "cannot open"
weeknum=
#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
您正在尝试从您的 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