使用IN和OUT参数在Oracle中调用存储过程

时间:2012-04-05 08:00:20

标签: sql oracle11g

我有这个程序:

CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

因此,当我像这样运行它时,它绝不会返回任何内容:

DECLARE
    amount NUMBER;
BEGIN
    PROC1(1000001, amount);
    dbms_output.put_line(amount);
END;

BTW我使用DreamCoder for Oracle。程序本身或我称之为程序有问题吗? INVOICE表中有一个条目,INVOICE_NR等于1000001。

3 个答案:

答案 0 :(得分:47)

如果在整个代码之前将服务器输出设置为ON模式,则可以正常工作,否则put_line()将无效。试试吧!

代码是,

set serveroutput on;
CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

然后按原样调用该函数:

DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;

答案 1 :(得分:3)

我有同样的问题。我使用了一个触发器,在那个触发器中我调用了一个程序来计算2个OUT变量中的一些值。当我试图在触发器体中打印结果时,屏幕上没有任何内容,但后来我解决了这个问题在函数中产生2个局部变量,用它们计算我需要的东西,最后,在OUT过程变量中复制这些变量。 我希望,这将是有用的,成功的!

答案 2 :(得分:1)

转到菜单工具 - > SQL输出,运行PL / SQL语句, 输出将显示在SQL输出面板上。