Oracle シノニムの問題
質問
私のシナリオ:
- スキーマ名:スキーマ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句ののの制限 スキーマ・オブジェクトは、パッケージに含まれないことができます。
言い換えれば、あなたはパッケージ・プロシージャのシノニムを作成することはできません。
私はラッパー手順は(非パッケージ)が作成されたソリューションと、そのために作成されたパブリック・シノニムを見てきました。
所属していません StackOverflow