2015-05-08 16:00 GMT-03:00 Matheus Saraiva <matheus.sara...@gmail.com>:

>     UPDATE "VendasItens"
>     SET produto_vendasitens = produto.produto_vendasitens,
> quantidade_vendasitens = produto.quantidade_vendasitens
>      FROM unnest(f_produtos) AS produto
>     WHERE venda_vendasitens = f_idvenda;
>
>
> Foi dessa forma que fiz a segunda tentativa, só que existe um pequeno
> porém. *produto_vendasitens *e *venda_vendasitens* formam a chave
> primária dessa tabela. Sendo assim a combinação entre eles não pode se
> repetir.
> Com o UPDATE dessa forma ele pegará o primeiro item do vetor e colocará em
> em todos os lugares onde a cláusula WHERE for satisfeita, depois fará a
> mesmo coisa com o segundo item do vetor, com o terceiro, quarto, e assim
> até o ultimo. Mesmo que não existisse restrições de chave o resultado não
> seria o desejado.
> Se tivesse um vetor com ['(2,20)', '(5,6)', '(9,1)', '(20,4)']::integer[]
> e o valor de f_idvenda fosse = 30. O resultado final seria:
>
> id_venda | produto_venda | quantidade_venda
> 30           |           20           |       4
> 30           |           20           |       4
> 30           |           20           |       4
> 30           |           20           |       4
> 30           |           20           |       4
>
> Na forma correta o UPDATE deve ser feito apenas uma vez para cada elemento
> do vetor.


Me parece que você está confundindo conceitos bem simples. É um problema na
sua lógica, se quiser filtrar pela chave primária composta, então utilize
tanto "venda_vendasitens" quanto "produto_vendasitens" na cláusula WHERE, e
não no SET. Não é isso que você queria?

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a