1

この問題は、SQLDeveloperの単体テスト機能を試したときに発生しました。

スキーマ内で作成されたプロシージャのテストを実行するとエラーが表示されますが、同じプロシージャをoracleが提供するスキーマの1つで実行すると、問題なく動作します。

SQL Developerは、次の呼び出しを生成します。

1)これは機能しません(エラーは以下に示されています):

BEGIN
 "IANC"."SIMPLE_PARAMETER"(P_X => 123);
END;

2)これはします:

BEGIN
 "HR"."SIMPLE_PARAMETER"(P_X => 123);
END;

手順は次のとおりです。

CREATE OR REPLACE PROCEDURE SIMPLE_PARAMETER 
(
  P_X IN NUMBER  
)
IS
BEGIN

  null;

END SIMPLE_PARAMETER;

以下はSQLPLUSからの出力です。ここで、プロシージャが私のスキーマで実行されるとエラーが表示されますが、同じプロシージャを別のスキーマで実行すると、プロシージャは期待どおりに機能します。

ここに画像の説明を入力してください

必要な場合は、Oracle EnterpriseEdition11.2.0.1.0を使用しています。

アップデート

手順の署名を示すスクリーンショット

ここに画像の説明を入力してください

また、プロシージャ呼び出しからスキーマ名を削除すると、プロシージャが実行され、期待どおりに完了します。

助けてくれてありがとう。

4

1 に答える 1

2

IANCのSIMPLE_PARAMETERプロシージャがHRのプロシージャと同じである(または少なくとも同じ署名を持っている)ことを確認しますか?`DESCRIBE"IANC"。"SIMPLE_PARAMETER"から何が得られますか。

(PS識別子はすべて大文字であるため、二重引用符はまったく必要ありません。)

追加:別の可能性として、IANCスキーマにIANCというパッケージがあるため、Oracleはそのパッケージに存在しないSIMPLE_PARAMETERというプロシージャを探しています。例:

SQL> exec bigdecimaltest

PL/SQL procedure successfully completed.

SQL> exec dcosta.bigdecimaltest

PL/SQL procedure successfully completed.

SQL> create or replace package dcosta as
  2  end;
  3  /

Package created.

SQL> exec dcosta.bigdecimaltest
BEGIN dcosta.bigdecimaltest; END;

             *
ERROR at line 1:
ORA-06550: line 1, column 14:
PLS-00302: component 'BIGDECIMALTEST' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

これはバグのある動作のようです。名前をpackage.memberとして解決する試みが成功しない場合、Oracleはそれをschema.objectとして試す必要があると思いますが、パッケージ名に一致するものが見つかったら、そのように見えます。それはそれを再考しません。

于 2012-05-31T20:17:34.400 に答える