sql >> Databáze >  >> RDS >> Oracle

Proč dostanu PLS-00302:komponenta musí být deklarována, když existuje?

Tuto chybu můžete získat, pokud máte objekt se stejným názvem jako schéma. Například:

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

Když odkazujete na S2.MY_FUNC2 název objektu se řeší, takže se nepokouší vyhodnotit S2 jako název schématu. Když to nazvete jako MY_FUNC2 není tam žádný zmatek, takže to funguje.

Dokumentace vysvětluje rozlišení názvů. První část kvalifikovaného názvu objektu – zde S2 – je vyhodnocena jako objekt v aktuálním schématu, než je vyhodnocena jako jiné schéma.

Nemusí to být sekvence; jiné objekty mohou způsobit stejnou chybu. Existenci objektů se stejným názvem můžete zkontrolovat dotazem v datovém slovníku.

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


  1. OMEZENÍ ZAHRANIČNÍHO KLÍČE SQL:Konečný, snadný průvodce pro nováčky

  2. Audit dat v NHibernate a SqlServer

  3. Chyba při mapování postgresových polí v Spring JPA

  4. Jak připojit SalesForce jako zdroj dat v Pyramid