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

Responder a