sql >> Database teknologi >  >> RDS >> Oracle

Hvorfor får jeg PLS-00302:komponent skal erklæres, når den eksisterer?

Du kan få den fejl, hvis du har et objekt med samme navn som skemaet. For eksempel:

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 henviser til S2.MY_FUNC2 objektnavnet bliver løst, så det ikke forsøger at evaluere S2 som et skemanavn. Når du bare kalder det som MY_FUNC2 der er ingen forvirring, så det virker.

Dokumentationen forklarer navneopløsning. Det første stykke af det kvalificerede objektnavn - S2 her - evalueres som et objekt på det aktuelle skema, før det evalueres som et andet skema.

Det er måske ikke en sekvens; andre objekter kan forårsage den samme fejl. Du kan kontrollere, om der findes objekter med samme navn ved at søge i dataordbogen.

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


  1. PostgreSQL Incremental Backup og Point-In-Time Recovery

  2. MariaDB JSON_SEARCH() Forklaret

  3. Rollback en forpligtet transaktion

  4. Sletning af en tilsluttet bruger fra et Oracle 10g-databaseskema