Проблема синонимов Oracle - PullRequest
       32

Проблема синонимов Oracle

3 голосов
/ 28 октября 2010

Мой сценарий:

  • Имя схемы : схема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 все еще получил ту же ошибку.

Что я тут не так сделал?

Ответы [ 2 ]

4 голосов
/ 28 октября 2010

Один из способов обойти это ограничение, предполагая, что вам действительно нужно вызывать процедуру с одним именем (по какой-либо причине), вы можете обернуть ее в процедуру уровня схемы:

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

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;
4 голосов
/ 28 октября 2010

Примечание здесь

Ограничение по предложению FOR Объект схемы не может содержаться в пакете.

Другими словами, вы не можете создать синоним для процедуры пакета.

Я видел решения, в которых создается процедура-оболочка (неупакованная) и для этого создается общедоступный синоним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...