question Oracle Synonymes
Question
Mon scénario:
- Nom du schéma : schema1
- Nom du package : pkg_system
- nom de la procédure : PROC1
Maintenant, je suis en train de créer un synonymes de mon PROC1 comme ci-dessous
CREATE PUBLIC SYNONYM call_proc FOR schema1.pkg_system.proc1;
... mais il m'a donné erreur de syntaxe.
ORA-00933: SQL command not properly ended
J'ai changé le code ci-dessous:
CREATE PUBLIC SYNONYM call_proc FOR pkg_system.proc1;
Je peux créer avec succès les synonymes mais quand j'ai essayé d'exécuter la procédure stockée via le synonyme:
EXEC call_proc
... a obtenu l'erreur suivante:
ORA-06550: line 1, column 7:
PLS-00201: identifier call_proc must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Et j'utilisé le nom de schéma pour appeler la procédure comme schema1.call_Proc
toujours eu la même erreur.
Ce que je fait de mal ici?
La solution
Une façon de contourner cette limitation, en supposant vraiment besoin d'appeler la procédure avec un seul nom (quelle qu'en soit la raison), vous pouvez l'envelopper dans une procédure au niveau du schéma:
CREATE PROCEDURE schema1.proc1 IS
BEGIN
pkg_system.proc1;
END;
CREATE PUBLIC SYNONYM proc1 FOR schema1.proc1;
Autres conseils
Restriction sur la clause FOR L'objet de schéma ne peut pas être contenu dans un emballage.
En d'autres termes, vous ne pouvez pas créer un synonyme pour une procédure de package.
J'ai vu des solutions où est créé et un synonyme public créé une procédure d'emballage (non emballé) pour cela.