Выпуск Oracle Synomys
Вопрос
Мой сценарий:
- Имя схемы: 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;
Другие советы
Примечание здесь
Ограничение на оговоркуОбъект схемы не может быть содержатся в упаковке.
Другими словами, вы не можете создать синоним процедуры пакета.
Я видел решения, где создается процедура обертки (не упакована), и для этого создается общественный синоним.