Oracle
 sql >> Database >  >> RDS >> Oracle

Funzione Oracle Pipelined

Lo ottieni perché il tuo codice assegna uno scalare al tipo di output. È necessario eseguire il cast della variabile in modo che corrisponda all'obiettivo dell'assegnazione. Quindi:

   SELECT type_struct(counter)
    INTO rec
    FROM dual;

Non hai necessariamente bisogno di una funzione pipeline. Possiamo usare table() con qualsiasi funzione che restituisce una raccolta.

Ecco un'implementazione molto più semplice, che richiede un solo 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;
/