2017-01-16 6 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がNUMBER TYPEの場合、なぜこのエラーが発生しますか? –

+0

彼はすでにあなたに答えました。 IF文では関数自体を呼び出していますが、これは再帰関数ではなく、 'get_num'にパラメータが必要なためです。あなたが望むものはおそらくあなたのパラメータである 'IF num = 1 THEN'でしょう。 –

答えて

4

あなたはIF get_num = 1 THENに問題があります。これはパラメータなしで関数get_numを呼び出しているためです。入力パラメータが1つの場合は

の場合は、おそらく平均:

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; 
関連する問題