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