因此,我们有一个Shell脚本,该脚本需要调用一个匿名块并接收回值。匿名块大约有100行,因此我们将其存储在文件中,因此对于SQL * Plus,它称为:
@/directory_path/anonymous_block "'param1'" "'param2'"
是的,我们传递了两个参数。最后,我们有一个DBMS_OUTPUT.PUT_LINE.......
那么,我们有一个问题,是如何将其返回给Shell?我们尝试了各种与此类似的代码:
proc=TEMPLATE1_MV<BR>
code=513
x=`print "
set heading off feedback off verify off timing off
@/u01/sql/stock_rpt_stats '$code' '$proc';
exit" | sqlplus -s $user/$pass`
y=`echo $x | awk '{print $1}'`<BR>
printf "HERE: $y\n"
但是没有运气,只有错误。
如果其中仅包含直接的SQL:
SELECT TRUNC(SYSDATE) FROM dual;
那会很好,但是不能引用包含SQL的文件。
任何有想法的人都会很棒。预先感谢。
答案 0 :(得分:1)
您尝试添加SET SERVEROUTPUT ON
吗?
我通常更喜欢使用Heredoc方法运行sqlplus
并将代码块的结果传递给这样的变量,这对我来说很好用。
scripts-$cat ./sqlplus_exec.sh
#!/bin/bash
output=$(sqlplus -s $user/$pass <<INP
set heading off feedback off verify off timing off
set serveroutput on
@print_output.sql
INP
)
echo "$output"
这是SQL文件
scripts-$cat print_output.sql
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
END;
/
scripts-$./sqlplus_exec.sh
HELLO WORLD