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

Jak wybrać typ zbiorczej zebranej tabeli rekordów?

Twój problem to w rzeczywistości błąd PLS-00642, a nie ORA-22905. Zasadniczo nie można używać lokalnych typów kolekcji w instrukcjach SQL. Dlatego rozwiązaniem jest zdefiniowanie typów na poziomie schematu. Definiując typy w ten sposób, nie możemy użyć składni %TYPE, zamiast tego musimy jawnie zdefiniować kolumnę (Pojawia się błąd PLS-00201 podczas tworzenia typu w Oracle ) tj.

create or replace type rec_type as object (
  COLUMN_1 integer,
  COLUMN_2 varchar2(128)
);

create or replace type tab_type as table of rec_type;

Następnie musisz jawnie przekonwertować wartości na odpowiedni typ, aby wykonać zbiorcze gromadzenie danych, jak wspomniano tutaj:ORA-00947 Za mało wartości podczas globalnego deklarowania typu .

Twoja procedura wyglądałaby zatem mniej więcej tak:

PROCEDURE MYPROC((PARAMS))AS
  TABLE_1 TAB_TYPE;
  lCount  integer;
BEGIN

  SELECT  REC_TYPE(COLUMN_A, COLUMN_B)
  BULK COLLECT INTO TABLE_1 
  FROM  TABLE_A;

  SELECT COUNT(*) INTO lCount FROM TABLE(TABLE_1);
END MYPROC;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chcesz utworzyć numery seryjne

  2. Brakujący artefakt com.oracle:ojdbc6:jar:11.2.0 ?

  3. Jak wyłączyć wygaśnięcie hasła Oracle?

  4. Pobieranie ORA-01882:nie znaleziono regionu strefy czasowej w Oracle UCP na instancji aws ec2?

  5. Dlaczego nie mogę rzucić Oracle BLOB z natywnego Javy Blob