sql >> Databasteknik >  >> RDS >> Oracle

Varför får jag PLS-00302:komponent måste deklareras när den finns?

Du kan få det felet om du har ett objekt med samma namn som schemat. Till exempel:

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

När du hänvisar till S2.MY_FUNC2 objektnamnet löses så det försöker inte utvärdera S2 som ett schemanamn. När du bara kallar det som MY_FUNC2 det finns ingen förvirring, så det fungerar.

Dokumentationen förklarar namnupplösning. Den första delen av det kvalificerade objektnamnet - S2 här - utvärderas som ett objekt på det aktuella schemat innan det utvärderas som ett annat schema.

Det kanske inte är en sekvens; andra objekt kan orsaka samma fel. Du kan kontrollera om det finns objekt med samma namn genom att söka i dataordlistan.

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


  1. Formatera SQLite-frågeresultat som kolumner med kolumnrubriker

  2. Anslutningshantering och strypning med ProxySQL

  3. Ändra en postgres containers serverport i Docker Compose

  4. UTF-8 hela vägen igenom