sql >> Database >  >> RDS >> Oracle

Waarom krijg ik PLS-00302:component moet worden aangegeven als het bestaat?

U kunt die fout krijgen als u een object hebt met dezelfde naam als het schema. Bijvoorbeeld:

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

Wanneer u verwijst naar S2.MY_FUNC2 de objectnaam wordt opgelost, zodat het niet probeert S2 te evalueren als een schemanaam. Als je het gewoon noemt als MY_FUNC2 er is geen verwarring, dus het werkt.

In de documentatie wordt de naamomzetting uitgelegd. Het eerste deel van de gekwalificeerde objectnaam - hier S2 - wordt geëvalueerd als een object in het huidige schema voordat het wordt geëvalueerd als een ander schema.

Het is misschien geen reeks; andere objecten kunnen dezelfde fout veroorzaken. U kunt het bestaan ​​van objecten met dezelfde naam controleren door de datadictionary te raadplegen.

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


  1. Array-elementen sorteren

  2. Genereer tabelrelatiediagram van bestaand schema (SQL Server)

  3. Oracle Trigger WHEN-clausule Voorbeeld

  4. Room Migration Alter Table voegt geen nieuwe kolom toe &migreert steeds opnieuw gebeld worden