pl sql - PLS-00306:调用'DISPLAY'时参数的数量或类型错误

时间:2016-01-31 07:11:01

标签: oracle stored-procedures plsql

我必须创建一个过程并使num1(= 5)和num2(= 3)输入参数而不是将它们声明为变量,然后将这些值分配到括号中它们。

我有第3个变量(num3),它是num1^num2(5 ^ 3)的结果,即125。 此pl / sql语句必须以exec my_power( 5, 3);

执行

我收到了PLS-00306: wrong number or types of arguments in call to 'DISPLAY'

这是我的代码:

CREATE OR REPLACE PROCEDURE display
( 
num1 IN NUMBER,
num2 IN NUMBER,
num3 IN OUT NUMBER
)
AS
BEGIN
  num3 := num1**num2;
  dbms_output.put_line('num3 = '|| (num1**num2));
END;
/
SET SERVEROUTPUT ON;
EXEC display (5, 3);

2 个答案:

答案 0 :(得分:1)

您的程序需要3个参数,但在您的通话中,您只提供2个参数。将您的主叫代码更改为

Declare
  result number;
begin
  display (5, 3, result);
end;

它应该有用。

更新

您声明了一个具有两个IN参数和一个IN OUT参数的过程 - 所有这些都是必需的。因此,Oracle要求您使用三个参数调用您的过程。你可能想尝试

display(5,3,8);

但这也不行 - 你的第三个参数是IN OUT,而Oracle需要你提供一个变量,它可以存储你在过程中分配给num3的值。

但如果您只想打印计算结果,那么您真的不需要第3个参数 - 将程序更改为

CREATE OR REPLACE PROCEDURE display
(
  num1 IN NUMBER,
  num2 IN NUMBER
)
AS
BEGIN
  dbms_output.put_line('num3 = '|| (num1**num2));
END;

然后,你可以用

来调用它
EXEC display (5, 3);

答案 1 :(得分:-1)

错了,请尝试

declare 
nu number;
begin
  display(2, 3, nu);
  dbms_output.put_line(nu);  
end;