用于添加2个数字的Oracle软件包

用于添加2个数字的Oracle软件包,oracle,package,Oracle,Package,我正在学习oracle软件包。我创建了一个包,其中我创建了一个过程来添加两个数字。下面是我的语法 CREATE PACKAGE ADD2Numbers AS PROCEDURE ADD1(A IN NUMBER ,B IN number ,C OUT Number ); END ADD2Numbers; CREATE OR REPLACE PACKAGE BODY ADD2Numbers AS PROCEDURE ADD1(A IN NUMBER ,B IN number

我正在学习oracle软件包。我创建了一个包,其中我创建了一个过程来添加两个数字。下面是我的语法

CREATE PACKAGE ADD2Numbers AS
    PROCEDURE ADD1(A IN NUMBER ,B IN number ,C OUT Number );
END ADD2Numbers;

CREATE OR REPLACE PACKAGE BODY  ADD2Numbers AS 
    PROCEDURE ADD1(A IN NUMBER ,B IN number ,C OUT Number ) IS 
    BEGIN
       C:=A + B;
    END ADD1;
END ADD2Numbers;
我调用这个程序如下

 Declare C Number; call ADD2Numbers.ADD1(1,2); Print :c;
但是我得到了下面的错误

调用ADD2Numbers.ADD1(1,2)
错误报告-
SQL错误:ORA-06553:PLS-306:调用“ADD1”时参数的数量或类型错误
655300000-“请-%s:%s”
*原因:
*行动:

我做错了什么

DECLARE
C Number;

BEGIN
 ADD2Numbers.ADD1(1,2,C);
 DBMS_OUTPUT.PUT_LINE(C);
END;
要在SQL Developer中查看dbms输出,请执行以下操作:
1.单击查看->数据库管理系统输出
2.单击上面步骤1打开的dbms输出窗口上的绿色“+”图标。
3.添加您正在使用的连接

4.再次运行上述匿名块

您已经声明了一个变量
c
,但没有将其作为参数传递给过程。传递给过程的参数数必须与其签名匹配

因此,解决方案非常简单(使用SQL*Plus语法):


正如@JustinCave所说,实现此类功能的正常方式是使用存储函数

CREATE PACKAGE ADD2Numbers AS
    FUNCTION ADD1(A IN NUMBER ,B IN number) return number;
END ADD2Numbers;

CREATE OR REPLACE PACKAGE BODY  ADD2Numbers AS 
    FUNCTION ADD1(A IN NUMBER ,B IN number) return number IS 
       c number;
    BEGIN
       C:=A + B;
       return c;
    END ADD1;
END ADD2Numbers;
你可以这样称呼它

select ADD2Numbers.ADD1(1,2) from dual;
declare 
  x number;
begin
  x := ADD2Numbers.ADD1(1,2);
  dbms_output.put_line('x=' || to_char(x));
end;
。。。像这样在PL/SQL中使用它

select ADD2Numbers.ADD1(1,2) from dual;
declare 
  x number;
begin
  x := ADD2Numbers.ADD1(1,2);
  dbms_output.put_line('x=' || to_char(x));
end;

请记住在使用DBMS_输出调用时启用SERVEROUTPUT(大多数IDE都会默认这样做)

请注意,实际上,对于这类事情,您不会使用带有
out
参数的过程。您将使用一个返回值的函数。谢谢。未显示C的值。我的程序有问题吗?应该可以。很可能是您如何调用程序的问题。谢谢。结果,我成功地完成了PL/SQL过程。应该显示结果。我的程序有问题吗