2016-01-31 57 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

相關問題