sql >> Base de Datos >  >> RDS >> Oracle

Función canalizada de Oracle

Obtiene esto porque su código asigna un escalar al tipo de salida. Debe convertir la variable para que coincida con el objetivo de la asignación. Entonces:

   SELECT type_struct(counter)
    INTO rec
    FROM dual;

No necesariamente necesita una función canalizada. Podemos usar table() con cualquier función que devuelva una colección.

Aquí hay una implementación mucho más simple, que requiere solo un 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;
/