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

Funkcja Oracle Pipelined

Otrzymujesz to, ponieważ twój kod przypisuje skalar do typu wyjściowego. Musisz rzutować zmienną, aby pasowała do celu przypisania. A więc:

   SELECT type_struct(counter)
    INTO rec
    FROM dual;

Niekoniecznie potrzebujesz funkcji potokowej. Możemy użyć table() z dowolną funkcją, która zwraca kolekcję.

Oto znacznie prostsza implementacja, która wymaga tylko jednego UDT.

CREATE TYPE tp_numbers AS TABLE OF number;
/
CREATE OR REPLACE FUNCTION gen_nums (na NUMBER, nb NUMBER)
RETURN tp_numbers 
IS
    return_value tp_numbers ;
BEGIN
    SELECT (na + level) - 1 
    bulk collect    INTO return_value  
    FROM dual
    connect by level <= nb;

    RETURN return_value ;
END gen_nums;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jeśli dane istnieją, w przeciwnym razie... używając Oracle SQL?

  2. Zduplikowany wiersz Oracle N razy, gdzie N jest kolumną

  3. Utwórz indeks na istniejącej tabeli Oracle

  4. Oracle otrzymuje klucze obce

  5. Filtrowanie według dnia tygodnia