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

解决此限制的一种方法,假设您确实需要使用单个名称调用该过程(无论出于何种原因),您可以将其包装在模式级过程中:

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

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