0

我有一个 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 中的输出。任何人都请帮忙。

4

1 回答 1

0

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

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

set serveroutput on
execute proc1(10,10);

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

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

然而这不起作用——你真的需要一个换行符。

所以诀窍是也使用-eflag with echo,它可以给你一个换行符\n

使用head -1修剪除包含程序结果的行之外的所有内容。

最终的单行答案:

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

PS我编辑了你的问题以删除密码:)

于 2013-09-04T08:07:36.610 回答