Вопрос

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

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

Что я здесь не так?

Это было полезно?

Решение

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

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

CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top