Obrigado pelas dicas, vou utilizar a função nativa unnest, ela me atende perfeitamente.
Obs.: Não estou utilizando chave estrangeira porque uso duas bases de dados distintas e não gostei do desmpenho do dblink. Alessandro Lima 2012/5/30 Fabrízio de Royes Mello <[email protected]> > > 2012/5/30 Adenilton Batista da Silva <[email protected]> > >> >> CREATE OR REPLACE FUNCTION STRTOROWS(NUMEROS TEXT) >> RETURNS SETOF INTEGER AS >> $BODY$ >> --PARA UTILIZAR A FUNÇÃO, PASSE OS NÚMEROS SEPARADOS POR VÍRGULA. >> EXEMPLO: SELECT STRTOROWS('1,2,3'); >> SELECT CAST((STRING_TO_ARRAY($1, ','))[S] AS INTEGER) FROM >> GENERATE_SERIES(1, ARRAY_UPPER((STRING_TO_ARRAY($1, ',')), 1)) AS S; >> $BODY$ >> LANGUAGE SQL; >> >> >> CREATE TEMP TABLE FOO(CODPRODUTO INTEGER, NOME NAME); >> INSERT INTO FOO VALUES (1, 'PRODUTO A'); >> INSERT INTO FOO VALUES (2, 'PRODUTO B'); >> >> CREATE TEMP TABLE FOO2 (CODPRODUTO TEXT); >> INSERT INTO FOO2 VALUES ('1,2,3'); >> >> SELECT >> * >> FROM >> ( >> SELECT STRTOROWS((SELECT CODPRODUTO FROM FOO2)) AS CODPRODUTO >> ) S >> WHERE S.CODPRODUTO NOT IN (SELECT CODPRODUTO FROM FOO); >> >> > Ou, se vc esta usando uma versão >= 8.4 pode usar a função nativa unnest > [1] e não tem necessidade de implementar a "strtorows". > > SELECT unnest(string_to_array(codproduto, ','))::integer as codproduto > FROM foo2 > EXCEPT > SELECT codproduto > FROM foo; > > [1] http://www.postgresql.org/docs/9.1/interactive/functions-array.html > > -- > Fabrízio de Royes Mello > Consultoria/Coaching PostgreSQL > >> Blog sobre TI: http://fabriziomello.blogspot.com > >> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello > >> Twitter: http://twitter.com/fabriziomello > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
