我有一个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中的输出。没有人请求帮助。
答案 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。我编辑了你的问题以删除密码:)