2017-01-16 22 views
2

時當我將參數傳遞給函數調用函數的錯誤,我得到以下錯誤:的Oracle PL/SQL:傳遞參數

Error: PLS-00306: wrong number or types of arguments in call to 'GET_NUM'.

的代碼如下:

CREATE OR REPLACE PACKAGE BODY TESTJNSABC IS 

    -- FUNCTION IMPLEMENTATIONS 
    FUNCTION get_num(num IN NUMBER) 
    RETURN VARCHAR2 IS 
    my_cursor VARCHAR2(20); 
    BEGIN 
    IF get_num = 1 THEN 

     my_cursor:= 'hello world'; 
    ELSE 
     my_cursor:= 'Hi!'; 
    END IF; 

    RETURN my_cursor; 

    END; 

    -- PROCEDURE IMPLEMENTATIONS 
    PROCEDURE testingabc AS 
    x NUMBER(3); 
    BEGIN 
     x:= 2; 
     dbms_output.put_line(get_num(x)); 
     END testingabc; 

END TESTJNSABC; 
+2

的問題是在'IF get_num = 1';你期望這樣做? – Aleksej

+0

我只是創建一個簡單的例子來查看功能和程序的功能。但是,如果1是一個數字類型,爲什麼我得到這個錯誤? –

+0

他已經回答你了。在IF語句中你正在調用函數本身,錯誤是因爲它不是一個遞歸函數,'get_num'需要一個參數。你想要的可能是'IF num = 1 THEN'這是你的參數。 –

回答

4

你在IF get_num = 1 THEN中有一個問題,因爲您在不帶參數的情況下調用功能get_num,而它有一個輸入參數

如果要檢查參數值,大概的意思是:

IF num = 1 THEN 
+0

我正要請你添加你的評論作爲答案。所以我可以給你+1 :) –

+0

這解決了我的問題,謝謝! –

0

問題在於IF get_num = 1。該代碼將在您將其更改爲IF num = 1後生效。

整個樣品如下代碼:

CREATE OR REPLACE PACKAGE BODY TESTJNSABC IS 

-- FUNCTION IMPLEMENTATIONS 

FUNCTION get_num(num IN NUMBER) 
    RETURN VARCHAR2 IS 
    my_cursor VARCHAR2(20); 
BEGIN 
IF num = 1 THEN 

    my_cursor:= 'hello world'; 
ELSE 
    my_cursor:= 'Hi!'; 
END IF; 

RETURN my_cursor; 

END; 

-- PROCEDURE IMPLEMENTATIONS 
PROCEDURE testingabc AS 
x NUMBER(3); 
BEGIN 
    x:= 2; 
    dbms_output.put_line(get_num(x)); 
    END testingabc; 

END TESTJNSABC;