Sql 在Oracle中使用in和OUT参数调用存储过程
我有以下程序:Sql 在Oracle中使用in和OUT参数调用存储过程,sql,oracle11g,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);
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;
顺便说一句,我使用Oracle的DreamCoder。程序本身或我称之为程序的方式有问题吗?发票表中有一个发票编号等于1000001的条目。进入菜单工具->SQL输出,运行PL/SQL语句,
输出将显示在SQL输出面板上 如果在完成整个代码之前将服务器输出设置为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;
我也有同样的问题。我使用了一个触发器,在该触发器中我调用了一个过程,该过程将一些值计算为两个OUT变量。当我试图在触发器主体中打印结果时,屏幕上没有显示任何内容。但后来我解决了这个问题,在一个函数中创建了两个局部变量,计算了我需要的变量,最后,将这些变量复制到您的OUT过程变量中。我希望它将是有用的和成功的 如果运行“begindbms\u output.put\u line('output test')end”,您看到输出了吗?这个过程和调用它的方法是完全正确的。我这样运行它,但是我没有看到输出。有没有可能DreamCoder没有显示put_line()的输出?没有,我尝试了
BEGIN dbms_output.put_line('hi');结束代码>也没有显示任何内容。同样适用于.NET:当我从.NET调用Oracle procs时,除非我选择进入局部变量,然后将局部变量值传递给输出变量,否则返回null。