Re: [pgbr-geral] função receber valores para selec ionar dentro do IN

2010-12-28 Por tôpico Beto Lima
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

2010-12-26 Por tôpico José Carlos Messias
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

2010-12-23 Por tôpico Beto Lima
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

2010-12-23 Por tôpico Angelo -TI - LightComm
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

2010-12-23 Por tôpico Emerson Hermann
/*
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

2010-12-22 Por tôpico Emerson Hermann
--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