Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego otrzymuję PLS-00302:komponent musi być zadeklarowany, gdy istnieje?

Możesz otrzymać ten błąd, jeśli masz obiekt o tej samej nazwie co schemat. Na przykład:

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

Kiedy odwołujesz się do S2.MY_FUNC2 nazwa obiektu jest rozpoznawana, więc nie próbuje ocenić S2 jako nazwy schematu. Kiedy nazywasz to po prostu jako MY_FUNC2 nie ma zamieszania, więc to działa.

Dokumentacja wyjaśnia rozwiązywanie nazw. Pierwszy element kwalifikowanej nazwy obiektu — tutaj S2 — jest oceniany jako obiekt w bieżącym schemacie, zanim zostanie oceniony jako inny schemat.

To może nie być sekwencja; inne obiekty mogą powodować ten sam błąd. Możesz sprawdzić istnienie obiektów o tej samej nazwie, odpytując słownik danych.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy Oracle ma odpowiednik zmiennych tabeli SQL Server?

  2. kursor:pin S czekaj na X

  3. Oracle:Jak sprawdzić, czy istnieje oczekująca transakcja?

  4. Jak uzyskać BLOB z pliku w PL/SQL?

  5. Oracle SQL — REGEXP_LIKE zawiera znaki inne niż a-z lub A-Z