2016-01-31 39 views
0

我不得不创建一个过程并使num1(其中= 5)和num2(它= 3)输入参数而不是声明他们作为变量,然后将这些值分配给括号。pl sql - PLS-00306:调用'DISPLAY'时参数的错误数量或类型

我有一个第三变量(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); 

回答

1

你的过程需要3个参数,但在您的来电,您提供的只有两个。更改您的呼叫代码为

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

它应该工作。

UPDATE

你宣称有两个IN参数和一个IN OUT参数的过程 - 所有这些强制性的。因此,Oracle要求您使用三个参数来调用您的过程。你可能会去尝试,

display(5,3,8);

但是这不会工作,无论是 - 你的第三个参数是IN OUT,和Oracle需要你提供一个变量,其中它可以存储分配给NUM3的价值你的程序。

但你并不真的需要第三个参数,如果你只想打印你的计算结果 - 改变你的程序,

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); 
+0

谢谢。你能举个例子吗? – rls1982

+2

@ rls1982:弗兰克的回答**就是一个例子。 –

+0

@ rls1982不确定“提供示例”的含义。我已经添加了一个解释和一个没有IN OUT参数的替代实现。 –

-1

错,请尝试

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

我必须声明num1和num2作为输入变量。 请您详细说明一下吗? 感谢您的帮助 – rls1982

相关问题