Vous pouvez obtenir cette erreur si vous avez un objet portant le même nom que le schéma. Par exemple :
create sequence s2;
begin
s2.a;
end;
/
ORA-06550: line 2, column 6:
PLS-00302: component 'A' must be declared
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored
Lorsque vous vous référez à S2.MY_FUNC2
le nom de l'objet est en cours de résolution afin qu'il n'essaie pas d'évaluer S2 en tant que nom de schéma. Lorsque vous l'appelez simplement comme MY_FUNC2
il n'y a pas de confusion, donc ça marche.
La documentation explique la résolution de noms. Le premier élément du nom d'objet qualifié - S2 ici - est évalué en tant qu'objet sur le schéma actuel avant d'être évalué en tant que schéma différent.
Ce n'est peut-être pas une séquence; d'autres objets peuvent provoquer la même erreur. Vous pouvez vérifier l'existence d'objets portant le même nom en interrogeant le dictionnaire de données.
select owner, object_type, object_name
from all_objects
where object_name = 'S2';