Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

will3698

Update com relacionamento oracle

Recommended Posts

Ola boa tarde.

Gostaria de fazer um update relacionando duas tabelas...
em uma versão 10.x do meu oracle eu consegui atraves do código

UPDATE /*+ BYPASS_UJVC */
(SELECT DA1.DA1_PRCVEN ALTERADO,DA1W.DA1_PRCVEN BASE
FROM DA1010 DA1,DA10101W DA1W
WHERE DA1.DA1_CODPRO = DA1W.DA1_CODPRO
AND DA1.D_E_L_E_T_ <> '*'
AND DA1W.D_E_L_E_T_ <> '*'
AND DA1.DA1_CODTAB = '035'
AND DA1.DA1_PRCVEN = 0
AND DA1W.DA1_PRCVEN <> 0
AND DA1W.DA1_CODTAB IN ('029','031','033'))
SET ALTERADO = BASE ;
Entretanto agora estou na versão 11.x, E o comando acima retorna erro :

Erro de SQL: ORA-01779: não é possível modificar uma coluna que mapeie uma tabela não preservada pela chave
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.


Fico grato por alguma ajuda :)
O forum é bastante interessante :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andei estudand hoje sobre esse tipo de processo no Oracle, e acabei desistindo dos meios mais
tradicionais e partindo pra outros meios.
consegui resolver utilizando o procedimento abaixo.


BEGIN
FOR R IN (SELECT DISTINCT(B.DA1_CODPRO),B.DA1_PRCVEN,B.DA1_CODTAB
FROM DA1010 D, DA10101W B
WHERE B.DA1_CODPRO = D.DA1_CODPRO
AND B.DA1_CODTAB IN ('029')
AND B.DA1_PRCVEN <> 0
AND B.D_E_L_E_T_ <> '*')
LOOP
UPDATE DA1010 SET DA1_PRCVEN = R.DA1_PRCVEN
WHERE DA1_CODPRO = R.DA1_CODPRO
AND DA1_CODTAB = '035';
END LOOP;
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser esta a melhor solução em Oracle para update "cruzado".

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.