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

Tableaux d'entiers Postgres en tant que paramètres ?

Voir :http://www.postgresql.org/docs/9.1/static/arrays.html

Si votre pilote non natif ne vous permet toujours pas de transmettre des tableaux, vous pouvez :

  • passer une représentation sous forme de chaîne d'un tableau (que votre procédure stockée peut ensuite analyser dans un tableau -- voir string_to_array )

    CREATE FUNCTION my_method(TEXT) RETURNS VOID AS $$ 
    DECLARE
           ids INT[];
    BEGIN
           ids = string_to_array($1,',');
           ...
    END $$ LANGUAGE plpgsql;
    

    alors

    SELECT my_method(:1)
    

    avec :1 ='1,2,3,4'

  • s'appuyer sur Postgres lui-même pour passer d'une chaîne à un tableau

    CREATE FUNCTION my_method(INT[]) RETURNS VOID AS $$ 
           ...
    END $$ LANGUAGE plpgsql;
    

    alors

    SELECT my_method('{1,2,3,4}')
    
  • choisissez de ne pas utiliser de variables liées et émettez une chaîne de commande explicite avec tous les paramètres épelés à la place (assurez-vous de valider ou d'échapper tous les paramètres provenant de l'extérieur pour éviter les attaques par injection SQL.)

    CREATE FUNCTION my_method(INT[]) RETURNS VOID AS $$ 
           ...
    END $$ LANGUAGE plpgsql;
    

    alors

    SELECT my_method(ARRAY [1,2,3,4])