从PL / SQL返回值

时间:2018-10-07 01:39:05

标签: oracle shell variables plsql

因此,我们有一个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的文件。

任何有想法的人都会很棒。预先感谢。

1 个答案:

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