sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué obtengo PLS-00302:el componente debe declararse cuando existe?

Puede obtener ese error si tiene un objeto con el mismo nombre que el esquema. Por ejemplo:

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

Cuando te refieres a S2.MY_FUNC2 el nombre del objeto se está resolviendo para que no intente evaluar S2 como un nombre de esquema. Cuando simplemente lo llamas como MY_FUNC2 no hay confusión, así que funciona.

La documentación explica la resolución de nombres. La primera parte del nombre de objeto calificado, S2 aquí, se evalúa como un objeto en el esquema actual antes de que se evalúe como un esquema diferente.

Puede que no sea una secuencia; otros objetos pueden causar el mismo error. Puede verificar la existencia de objetos con el mismo nombre consultando el diccionario de datos.

select owner, object_type, object_name
from all_objects
where object_name = 'S2';