用于添加2个数字的Oracle包

时间:2015-09-07 06:59:30

标签: 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 ,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'时参数的数量或类型错误
  06553. 00000 - “PLS-%s:%s”
  *原因:
  *操作:

我做错了什么?

2 个答案:

答案 0 :(得分:1)

DECLARE
C Number;

BEGIN
 ADD2Numbers.ADD1(1,2,C);
 DBMS_OUTPUT.PUT_LINE(C);
END;

在SQL Developer中查看dbms输出:
1.单击View-> Dbms输出
2.单击上面步骤1打开的绿色“+”图标和dbms输出窗口。
3.添加您正在使用的连接
4.再次运行上述匿名区块

答案 1 :(得分:1)

您已声明变量c但未将其作为参数传递给过程。传递给过程的参数数量必须与其签名匹配。

所以解决方案很简单(这是使用SQL * Plus语法):

define C Number; 
call ADD2Numbers.ADD1(1,2, :C);  
print  c;

正如@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;

...像这样在PL / SQL中使用它......

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

请记住在使用DBMS_OUTPUT调用时启用SERVEROUTPUT(大多数IDE将默认执行此操作)。 Find out more