--Baseado no seu exemplo faria dessa forma:

--SELECT * FROM rel_treinamento_admin2(13,$$1,2,3,4$$);

-- criacao de tipo, acho que não é necessário no seu caso, criei só
para exemplificar
CREATE TYPE public.tpi AS
(
        id                      INTEGER
);

-- O segundo parametro ficaria como text, dentro da função seria feito
cast para inteiro
--a função começa assim versao 2 :
DROP FUNCTION IF EXISTS rel_treinamento_admin2 (IN x integer, IN y text);
CREATE OR REPLACE FUNCTION rel_treinamento_admin2(IN x integer, IN y text)
     RETURNS SETOF tpi AS
$$
DECLARE
     j    tpi;
BEGIN

     FOR j IN
               (
                SELECT sua_query
                  FROM generate_series(1,x) AS sua_query  -- aqui
poderia ser a sua consulta
                 WHERE sua_query
                    -- a parte do in
                    IN
                     (
                         SELECT z.id[i]::integer
                           FROM
                              (
                                 SELECT *
                                   FROM string_to_array(y,',')  AS id
                              ) AS z,
                              generate_series(
1,array_upper(string_to_array(y,','),1)) AS i
                     )
               )

     LOOP

          RETURN NEXT j;

     END LOOP;


     RAISE NOTICE 'Processo concluido com sucesso!!!';

     RETURN;

EXCEPTION WHEN QUERY_CANCELED THEN
     RAISE NOTICE 'Processo cancelado, ROLLBACK EFETUADO!!!';

     RETURN;
        
END;
$$
LANGUAGE 'plpgsql';

-- Sintetizando ... a parte do IN em query, basicamente seria assim:

   SELECT sua_query
                  FROM generate_series(1,13) AS sua_query
                 WHERE sua_query
                    IN
                     (
                         SELECT z.id[i]::integer
                           FROM
                              (
                                 SELECT *
                                   FROM string_to_array('1,2,3,4',',')  AS id
                              ) AS z,
                              generate_series(
1,array_upper(string_to_array('1,2,3,4',','),1)) AS i
                     ) ;
Espero ter ajudado!

Cordialmente,

Emerson Hermann

Em 22 de dezembro de 2010 11:03, Beto Lima <betol...@gmail.com> escreveu:
> pessoal fiz uma função mas preciso passar uma lista de valores para
> buscar dentro do IN...
>
> SELECT * FROM rel_treinamento_admin(13,1,2,3,4)
>
> a função começa assim:
>
> CREATE OR REPLACE FUNCTION rel_treinamento_admin(IN x integer, IN y
> integer, OUT nome_posto text, OUT nome text, OUT soma_notas text)
>
> numa parte do select preciso comparar uma coluna com IN valores do
> segundo parametro
>
> ex: AND coluna IN ($2)
>
> Só que não sei como passar estes valores para o segundo parametro no
> caso o IN y integer
>
> valeu
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a