3

スキーマ A、パッケージ B、プロシージャ C があります。B はスキーマ A にあり、C は B のパッケージ本体にあります。

私が言うとうまくいきます:

Begin 
Exec B.C;
END;

しかし、私が言うとエラーがスローされます:

Begin
Exec A.B.C;
END;

Error report:
ORA-06550: line 2, column 12:
PLS-00302: component 'B' must be declared
ORA-06550: line 2, column 4:
PL/SQL: Statement ignored

A としてログインするので、A のスキーマに含まれます。および SELECT * FROM user_OBJECTS WHERE OBJECT_NAME = 'B'; パッケージとパッケージ本体の両方が有効であることを示します。

4

2 に答える 2

-1

パッケージの構文エラーを修正します。これは一般的な PL/SQL コンパイル エラー メッセージです。

構文エラーが発生した PL/SQL のエラー ポイント ( line 2, column 12) を確認して修正し、コードを再コンパイルしてください。

Component 'B' must be declared.

その後、EXECUTE_CATALOG_ROLE を付与して、ユーザー 'A' にデータ ディクショナリ内のパッケージとプロシージャの実行権限を許可します。

grant EXECUTE_CATALOG_ROLE to A;
于 2012-11-10T19:33:26.050 に答える