On 06/05/2015 12:22, Matheus de Oliveira wrote:

On Tue, May 5, 2015 at 3:10 PM, Matheus Saraiva <matheus.sara...@gmail.com <mailto:matheus.sara...@gmail.com>> wrote:

    /*UPDATE "VendasItens" SET (produto_vendasitens,
    quantidade_vendasitens) = produto.* FROM unnest(f_produtos) AS
    produto WHERE venda_vendasitens = f_idvenda;*/


Infelizmente essa sintaxe não é aceita ainda, há discussões para implantar algo semelhante em versões futuras.

Hoje você teria que fazer:

    UPDATE "VendasItens"
SET (produto_vendasitens, quantidade_vendasitens) = (produto.produto_vendasitens, produto.quantidade_vendasitens)
FROM unnest(f_produtos) AS produto
WHERE venda_vendasitens = f_idvenda;

Ou:

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.
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a