Pular para o conteúdo
Visualizando 13 posts - 1 até 13 (de 13 do total)
  • Autor
    Posts
  • #99010
    cads-info
    Participante

      Alguém pode me ajudar a fazer este update no Oracle 11G

      update tabelaA set tabelaA.campoA=’70’
      from tabelaA,tabelaB
      where tabelaA.campoK=tabelaB.campoY

      No SQL Server, funciona perfeitamente, só que no Oracle 11G dá um erro
      Banco de Dados: Oracle 11.
      Erro do Banco (933): ORA-00933: SQL command not properly ended

      Obrigado

      #99012
      burga
      Participante

        No Oracle você não pode fazer JOIN direto em um UPDATE, use o MERGE:

        MERGE INTO tabelaA a
        USING tabelaB b
        ON (a.campoK=b.campoY)
        WHEN MATCHED THEN
        UPDATE SET a.campoA='70';

        #99014
        leandrolbs
        Participante


          update tabelaA set tabelaA.campoA='70'
          from tabelaA,tabelaB
          where tabelaA.campoK=tabelaB.campoY

          Acho que assim funciona tambem:


          update tabelaA set tabelaA.campoA='70'
          from tabelaA
          where exists(
          select * from tabelaB
          where tabelaA.campoK=tabelaB.campoY
          )

          #99015
          cads-info
          Participante

            Baseado nas dicas segue o código que montei mas que mesmo assim acontece o mesmo erro.

            update e440ipc set e440ipc.cstpis='70' from e440nfc,e440ipc,e075pro,e022clf where exists( select e440ipc.cstpis from e440nfc,e440ipc,e075pro,e022clf where e022clf.codclf=e075pro.codclf and e440ipc.codpro=E075pro.codpro and e440nfc.codemp=e440ipc.codemp and e440nfc.codfil=e440ipc.codfil and e440nfc.codfor=e440ipc.codfor and e440nfc.codsnf=e440ipc.codsnf and e440nfc.numnfc=e440ipc.numnfc and e440nfc.datent>='01/04/2011' and e022clf.tripis='N' )

            Erro:
            Erro do Banco (933): ORA-00933: SQL command not properly ended

            #99016
            VitorLeandro
            Participante

              Acho que o problema está em você colocar o nome da tabela após o UPDATE.. Tem que ser o apelido inserido no FROM…

              update tabelaA set tabelaA.campoA='70'
              from tabelaA,tabelaB
              where tabelaA.campoK=tabelaB.campoY

              Correto:

              update A set A.campoA='70'
              from tabelaA A, tabelaB B
              where A.campoK=B.campoY

              Testa aí..

              #99020
              cads-info
              Participante

                Fiz mais mudanças segundo o pessoal aqui continua o mesmo erro:

                update A set A.cstpis='71' from e440ipc A, e440nfc B, e075pro C ,e022clf D where D.codclf=C.codclf and A.codpro=C.codpro and B.codemp=A.codemp and B.codfil=A.codfil and B.codfor=A.codfor and B.codsnf=A.codsnf and B.numnfc=A.numnfc and B.datent>='01/04/2011' and D.tripis='N'

                Erro do Banco (933): ORA-00933: SQL command not properly ended

                #99026
                leandrolbs
                Participante

                  Tente assim amigo:

                  update e440ipc A
                  set A.cstpis = ’71’
                  where exists (
                  select * from e440nfc B, e075pro C, e022clf D
                  where D.codclf = C.codclf
                  and A.codpro = C.codpro
                  and B.codemp = A.codemp
                  and B.codfil = A.codfil
                  and B.codfor = A.codfor
                  and B.codsnf = A.codsnf
                  and B.numnfc = A.numnfc
                  and B.datent >= ’01/04/2011′
                  and D.tripis = ‘N’
                  )

                  #99028
                  cads-info
                  Participante

                    leandrolbs este comando SQL funcionou Perfeito!

                    Exatamente o que eu queria.

                    Podem marcar como resolvido.

                    Obrigado leandro e a todos que ajudaram.

                    #99029
                    burga
                    Participante

                      O seu dava erro porque UPDATE não tem FROM… A sintaxe é:

                      UPDATE [tabela] SET campo=valor [,campo=valor] WHERE [condições];

                      #99031
                      cads-info
                      Participante

                        burga

                        Entendi, obrigado.

                        Mas pode colocar o tópico como [RESOLVIDO].

                        #99045
                        rman
                        Participante

                          Muitos não sabem, mas é possivel fazer JOIN no UPDATE do Oracle

                          Ficaria assim:

                          UPDATE tabelaA A
                          INNER JOIN tabelaB B ON B.campoY = A.campoK
                          SET A.campoA = ’70’

                          #99075
                          burga
                          Participante

                            [quote=”rman”:3duyj8er]Muitos não sabem, mas é possivel fazer JOIN no UPDATE do Oracle

                            Ficaria assim:

                            UPDATE tabelaA A
                            INNER JOIN tabelaB B ON B.campoY = A.campoK
                            SET A.campoA = ’70′[/quote]

                            Desculpe o ress, mas fiquei curioso.

                            Pode dar um exemplo que funcione no Oracle sobre essa DML? Sem subconsulta!! Pois nunca funcionou pra mim esse tipo de DML, como descrito na sua mensagem.

                            #99087
                            rman
                            Participante

                              burga,

                              Fui fazer uma exemplo no Oracle 11g hoje, e realmente não funcionou…

                              Faz muito tempo que eu tinha testado isso, como não seguia o SQL padrão eu não adotei como pratica.

                              Mas a idéia era o seguinte:

                              UPDATE
                              SET =

                              UPDATE tabelaA b INNER JOIN tabelaB b ON b.codigo = a.codigo
                              SET a.coluna = b.coluna

                              Creio que o teste foi feito em Oracle 10g, quem puder testar… No 11g não funciona…

                            Visualizando 13 posts - 1 até 13 (de 13 do total)
                            • Você deve fazer login para responder a este tópico.