如何将Oracle存储过程的结果返回给shell脚本

时间:2013-09-04 07:51:13

标签: oracle shell

我有一个oracle过程proc1,它添加两个值并给出结果。我必须从shell调用此过程并将其结果显示回shell。我能够从shell调用该过程,但它只是显示PL / SQL过程成功完成。但结果没有进入shell。

我这样做是为了从shell调用程序......

$  echo "execute proc1(10,10);"|sqlplus -s system/xxxxx@orcl

这是正常运行的程序。

  create or replace procedure proc1
 (N1 in number,N2 in number) is
 begin
 dbms_output.put_line(N1+N2);
 end;
 /

我需要shell中的输出。没有人请求帮助。

1 个答案:

答案 0 :(得分:0)

我知道有另一个答案显示如何在单独的行上使用set serveroutput on和过程调用,但是我将这个答案写成 one-liner 来做同样的事情

基本上你需要把它推到sqlplus:

set serveroutput on
execute proc1(10,10);

您可能一开始认为这可以在一行上完成,用分号分隔。

set serveroutput on; execute proc1(10,10);

但是这不起作用 - 你真的需要一个换行符。

所以诀窍是在-e上使用echo标记,这可以为您提供\n的换行符。

除了包含过程结果的行外,每次使用head -1修剪。

最后的一行答案:

echo -e "set serveroutput on\n execute proc1(10,10);"|sqlplus -s system/xxxxx@orcl| head -1

P.S。我编辑了你的问题以删除密码:)