Re: [pgbr-geral] função receber valores para selec ionar dentro do IN
Pessoal obrigado pelas dicas mesmo, confesso que não tive tempo para testar ainda, pois cheguei de viagem hoje. mas desde já agradeço e logo irei rever essa questão. valeu ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] função receber valores para selec ionar dentro do IN
vc pode usar array no argumento da funcao select * from tabela where campo = ANY( arg_array ) ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] função receber valores para selec ionar dentro do IN
nossa Emerson , não entendi nada mas valeu pela ajuda. vou ter que ler isso umas 50 vezes pra sacar hehe ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] função receber valores para selec ionar dentro do IN
Beto, Não seria o caso de você passar o parametro como array e dentro da função você utilizar o array_to_string para converter o array em uma stringo para o seu IN? veja na documentação do PostrgreSQL, pois passando por array é a melhor forma (a meu ver) de resolver seu problema. Qualquer dúvida, favor entrar em contato. Um grande Abraço, Angelo M. Rodrigues LightComm Tecnologia Cml: (11) 3369-5033 Celular: (11) 7821-8298 Nextel: 54 * 13944 www.lightcomm.com.br ang...@lightcomm.com.br MSN: angelomrodrig...@hotmail.com GTalk: angelomrodrig...@gmail.com Em 23/12/2010, às 12:06, Beto Lima escreveu: nossa Emerson , não entendi nada mas valeu pela ajuda. vou ter que ler isso umas 50 vezes pra sacar hehe ___ 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
Re: [pgbr-geral] função receber valores para selec ionar dentro do IN
/* Desculpa, não fui claro ... Vamos por partes... dividindo o moido abaixo ... */ --1. A função generate_series gera uma sequencia funciona da seguinte forma: [1] --Exemplo: (gerando um listagem com 10 linhas...) SELECT * FROM generate_series(1,10); /* --resultado generate_series --- 1 2 3 4 5 6 7 8 9 10 (10 rows) */ --2. A função string_to_array, transforma uma string em array [2] --Exemplo: (transformando uma string em um array de string, usando como critério as ',' virgulas na string, para geração do array ) SELECT * FROM string_to_array('1,2,3,4',','); --{1,2,3,4} /*resultado string_to_array - {1,2,3,4} (1 row) */ --3. A função array_upper, dá a dimensão, o tamanho do array [2] --Exemplo: (obtendo o tamanho do array) SELECT array_upper(string_to_array('{1,2,3,4}',','),1); --4 /* --resultado array_upper - 4 (1 row) */ --4. A combinacao disso fica assim: --Exemplo: o resultado desta consulta irá retornar duas colunas uma do tipo array de string e uma do tipo integer (indice do array), as seguintes colunas são: -- id(text[]), i(integer) SELECT * 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; /* --resultado id | i ---+--- {1,2,3,4} | 1 {1,2,3,4} | 2 {1,2,3,4} | 3 {1,2,3,4} | 4 (4 rows) */ --5. Tratando a query do item 4 fica dessa forma, que foi a transformação de vários ids em formato linha texto para formato coluna inteiros. --Exemplo: o resultado obtido para uso no IN se for o caso 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; /* --resultado id 1 2 3 4 (4 rows) */ /* [1]http://www.postgresql.org/docs/9.0/static/functions-srf.html [2]http://www.postgresql.org/docs/9.0/static/functions-array.html Cordialmente Emerson Hermann */ Em 23 de dezembro de 2010 11:06, Beto Lima betol...@gmail.com escreveu: nossa Emerson , não entendi nada mas valeu pela ajuda. vou ter que ler isso umas 50 vezes pra sacar hehe ___ 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
Re: [pgbr-geral] função receber valores para selec ionar dentro do IN
--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 jtpi; 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