我正在学习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”
*原因:
*操作:
我做错了什么?
答案 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