Lorsque les choses fonctionnent dans des blocs anonymes mais pas dans des procédures stockées, c'est généralement à cause des droits du définisseur par rapport aux droits de l'invocateur. Les blocs anonymes et les procédures de droits de l'invocateur peuvent utiliser les privilèges accordés via les rôles, mais les procédures de droits du définisseur ne le peuvent pas.
Essayez de changer return varchar2 is
pour return varchar2 authid current_user is
.