Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle Pipelined-Funktion

Sie erhalten dies, weil Ihr Code dem Ausgabetyp einen Skalar zuweist. Sie müssen die Variable umwandeln, damit sie mit dem Zuweisungsziel übereinstimmt. Also:

   SELECT type_struct(counter)
    INTO rec
    FROM dual;

Sie benötigen nicht unbedingt eine Pipeline-Funktion. Wir können table() verwenden mit jeder Funktion, die eine Sammlung zurückgibt.

Hier ist eine viel einfachere Implementierung, die nur einen UDT benötigt.

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;
/