will3698 0 Denunciar post Postado Julho 7, 2014 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
will3698 0 Denunciar post Postado Julho 7, 2014 Andei estudand hoje sobre esse tipo de processo no Oracle, e acabei desistindo dos meios maistradicionais e partindo pra outros meios.consegui resolver utilizando o procedimento abaixo.BEGINFOR R IN (SELECT DISTINCT(B.DA1_CODPRO),B.DA1_PRCVEN,B.DA1_CODTABFROM DA1010 D, DA10101W BWHERE B.DA1_CODPRO = D.DA1_CODPROAND B.DA1_CODTAB IN ('029')AND B.DA1_PRCVEN <> 0AND B.D_E_L_E_T_ <> '*')LOOPUPDATE DA1010 SET DA1_PRCVEN = R.DA1_PRCVENWHERE DA1_CODPRO = R.DA1_CODPROAND DA1_CODTAB = '035';END LOOP;END; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 8, 2014 Creio ser esta a melhor solução em Oracle para update "cruzado". Compartilhar este post Link para o post Compartilhar em outros sites