Puoi ottenere quell'errore se hai un oggetto con lo stesso nome dello schema. Ad esempio:
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
Quando fai riferimento a S2.MY_FUNC2
il nome dell'oggetto è in fase di risoluzione, quindi non tenta di valutare S2 come nome di schema. Quando lo chiami semplicemente come MY_FUNC2
non c'è confusione, quindi funziona.
La documentazione spiega la risoluzione dei nomi. La prima parte del nome dell'oggetto completo - S2 qui - viene valutata come un oggetto nello schema corrente prima di essere valutata come uno schema diverso.
Potrebbe non essere una sequenza; altri oggetti possono causare lo stesso errore. Puoi verificare l'esistenza di oggetti con lo stesso nome interrogando il dizionario dei dati.
select owner, object_type, object_name
from all_objects
where object_name = 'S2';