2012-04-05 84 views
28

我有这样的过程:调用在Oracle中IN和OUT存储过程的参数

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为甲骨文。程序本身或者我称之为的方式有问题吗?在INVOICE表中有一个INVOICE_NR等于100000的条目。

+2

如果运行“begin dbms_output.put_line('output test')end;”你看到输出了吗?这个程序和调用它的方式是完全正确的。 – arturro 2012-04-05 08:15:05

+0

我以这种方式运行它,但我没有看到输出。 DreamCoder可能不显示put_line()的输出吗? – RegedUser00x 2012-04-05 08:29:32

+0

不,我用'BEGIN dbms_output.put_line('hi'); END;'它也没有显示任何东西。 – RegedUser00x 2012-04-05 08:32:22

回答

1

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

34

如果您在整个代码之前将服务器输出设置为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; 
2

我有同样的疑难问题使用的触发,并且在触发我叫程序它在2个OUT变量中计算一些值。当我试图将结果打印在触发器主体中时,屏幕上没有任何内容,但后来我解决了这个问题,在函数中创建了2个局部变量,计算了我需要的值,最后将这些变量复制到你的OUT程序变量。 我希望,这将是有用的,成功的!

相关问题