Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pourquoi est-ce que j'obtiens PLS-00302 :le composant doit être déclaré lorsqu'il existe ?

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';