52

我有这个程序:

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;

顺便说一句,我使用 DreamCoder for Oracle。程序本身或我调用它的方式有问题吗?INVOICE 表中有一个 INVOICE_NR 等于 1000001 的条目。

4

3 回答 3

68

如果在整个代码之前将服务器输出设置为 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;
于 2013-06-16T06:52:53.830 回答
3

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

于 2016-05-04T22:46:24.840 回答
1

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

于 2012-04-07T05:54:17.733 回答