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

Reg*_*00x 39 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;
Run Code Online (Sandbox Code Playgroud)

所以,当我像这样运行时,它绝对没有返回:

DECLARE
    amount NUMBER;
BEGIN
    PROC1(1000001, amount);
    dbms_output.put_line(amount);
END;
Run Code Online (Sandbox Code Playgroud)

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

小智 50

如果在整个代码之前将服务器输出设置为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;
Run Code Online (Sandbox Code Playgroud)

然后按原样调用该函数:

DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;
Run Code Online (Sandbox Code Playgroud)


小智 1

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