Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction Oracle Pipeline

Vous obtenez cela parce que votre code attribue un scalaire au type de sortie. Vous devez caster la variable pour qu'elle corresponde à la cible de l'affectation. Donc :

   SELECT type_struct(counter)
    INTO rec
    FROM dual;

Vous n'avez pas nécessairement besoin d'une fonction en pipeline. Nous pouvons utiliser table() avec n'importe quelle fonction qui retourne une collection.

Voici une implémentation beaucoup plus simple, qui ne nécessite qu'un seul 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;
/