3

私のシナリオ:

  • スキーマ名:schema1
  • パッケージ名: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が、同じエラーが発生しました。

私がここで何を間違えたのですか?

4

2 に答える 2

4

ここに注意してください

FOR句 の制限スキーマオブジェクトをパッケージに含めることはできません。

つまり、パッケージプロシージャのシノニムを作成することはできません。

ラッパープロシージャ(パッケージ化されていない)が作成され、そのためにパブリックシノニムが作成されるソリューションを見てきました。

于 2010-10-28T00:28:30.033 に答える
4

この制限を回避する1つの方法は、(何らかの理由で)単一の名前でプロシージャを呼び出す必要があると仮定して、スキーマレベルのプロシージャでラップすることです。

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

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;
于 2010-10-28T01:32:33.430 に答える