質問

私のシナリオ:

  • スキーマ名:スキーマ1
  • パッケージ名:pkg_system
  • プロシージャ名:proc1

今、以下のように proc1 のシノニムを作成しようとしています

CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;

...しかし、構文エラーが発生しました。

ORA-00933: SQL command not properly ended

コードを以下のように変更しました。

CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;

シノニムは正常に作成できますが、シノニムを介してストアド プロシージャを実行しようとすると、次のようになります。

EXEC call_proc

...次のエラーが発生しました:

ORA-06550: line 1, column 7:
PLS-00201: identifier call_proc must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

そして、スキーマ名を使用して次のようなプロシージャを呼び出しました schema1.call_Proc それでも同じエラーが発生しました。

ここで私が何を間違えたのでしょうか?

役に立ちましたか?

解決

あなたは本当に(何らかの理由で)単一の名前を持つプロシージャを呼び出す必要があると仮定すると、あなたは、スキーマ・レベルの手順でそれをラップすることができ、この制限を回避する一つの方法、:

CREATE PROCEDURE schema1.proc1 IS
BEGIN
   pkg_system.proc1;
END;

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;

他のヒント

ここで

する

FOR句のの

制限 スキーマ・オブジェクトは、パッケージに含まれないことができます。

言い換えれば、あなたはパッケージ・プロシージャのシノニムを作成することはできません。

私はラッパー手順は(非パッケージ)が作成されたソリューションと、そのために作成されたパブリック・シノニムを見てきました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top