Oracle同义词问题

时间:2010-10-28 00:15:21

标签: sql oracle synonym ora-00933 ora-06550

我的情景:

  • 架构名称: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之类的过程仍然遇到同样的错误。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

注意here

对FOR子句的限制 架构对象不能包含在包中。

换句话说,您无法为包过程创建同义词。

我见过创建包装程序(非打包)并为此创建公共同义词的解决方案。

答案 1 :(得分:4)

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

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

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;