2016-10-25 18 views
3

次のコードは動作しません。これはコンパイルされますが、parm_valueパラメータとしてsysdateを呼び出すと、PLS-00307: too many declarations of 'P_UPSERT_SDE_DATA' match this callがスローされます。varchar2エントリをコメントアウトすると、オーバーロードは日付と数値のデータ型だけで期待通りに機能します。DATEおよびVARCHAR2を使用したOracleプロシージャのオーバーロード

parm_valuesデータ型(特に日付とvarchar2)のみが異なるパラメータを受け入れることを試みている最善の方法は何ですか?

PROCEDURE P_Upsert_SDE_Data(parm_table_name GORSDAV.GORSDAV_TABLE_NAME%TYPE, 
           parm_attr_name  GORSDAV.GORSDAV_ATTR_NAME%TYPE, 
           parm_key    GORSDAV.GORSDAV_PK_PARENTTAB%TYPE, 
           parm_user_id  GORSDAV.GORSDAV_USER_ID%TYPE, 
           parm_value   VARCHAR2); 
--        
    PROCEDURE P_Upsert_SDE_Data(parm_table_name GORSDAV.GORSDAV_TABLE_NAME%TYPE, 
           parm_attr_name  GORSDAV.GORSDAV_ATTR_NAME%TYPE, 
           parm_key    GORSDAV.GORSDAV_PK_PARENTTAB%TYPE, 
           parm_user_id  GORSDAV.GORSDAV_USER_ID%TYPE, 
           parm_value   NUMBER); 

    PROCEDURE P_Upsert_SDE_Data(parm_table_name GORSDAV.GORSDAV_TABLE_NAME%TYPE, 
           parm_attr_name  GORSDAV.GORSDAV_ATTR_NAME%TYPE, 
           parm_key    GORSDAV.GORSDAV_PK_PARENTTAB%TYPE, 
           parm_user_id  GORSDAV.GORSDAV_USER_ID%TYPE, 
           parm_value   DATE); 
+0

だから、どうやって手続きを呼びますか? –

+0

'UTL_SDE.p_Upsert_SDE_Data( 'FRBGRNT'、 'GRANT_END_DATE'、var_FRBGRNT_CODE、 'BANNER_GAS_SYNS'、SYSDATE);'しかし、私はsysdateに対して 'TO_DATE( '20020315'、 'yyyymmdd')'を試みました。同じ問題。 – JDro04

+2

'gorsdav'カラムと' var_frb_grnt_code'(?)変数の完全なデータ型を含めるように質問を編集できますか? –

答えて

2

あなたが渡した他の引数の1つが暗黙的に変換されている場合は、これを見ることができます。あなたが投稿したコールから、私はvar_FRB‌​GRNT_CODEが異なるタイプであり、変換されていると思われます。例えばその変数は数値で、GORSDAV.GORSDAV_PK_PARENTTABは文字列です。

From the documentation

PL/SQLコンパイラが暗黙的にマッチング型に一つのパラメータを変換した場合、呼び出されたサブプログラムを決定しようとし、その後、コンパイラは、それは暗黙的にマッチングに変換することができ、他のパラメータを探し

タイプ。複数の一致がある場合、Example 8-34のようにコンパイル時エラーPLS-00307が発生します。

他の引数の1つを暗黙的に変換すると、他の引数の潜在的な変換が検索されます。暗黙的にお互いに変換できる、日付とvarchar2のバージョンが表示されるのは、それだけです。すべての引数が仮パラメータ宣言に使用されるテーブル列と同じ型の場合、暗黙の変換は検索されず、date/varchar2バージョンでは混同されません。

+0

正確に正しい。私は過負荷の変数について非常に心配していた、私はすべて同じものだったものが重要であるとは思わなかった。どうもありがとうございました。 – JDro04

0

このエラーが発生するたびに、仕様宣言と本文宣言との間に不一致があるようです。スペック宣言のそれぞれがあなたのボディ宣言と正確に一致することを確認してください。

関連する問題