- Este tópico contém 12 respostas, 5 vozes e foi atualizado pela última vez 14 anos, 10 meses atrás por
rman.
-
AutorPosts
-
29 de abril de 2011 às 9:39 pm #99010
cads-info
ParticipanteAlguém pode me ajudar a fazer este update no Oracle 11G
update tabelaA set tabelaA.campoA=’70’
from tabelaA,tabelaB
where tabelaA.campoK=tabelaB.campoYNo 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 endedObrigado
29 de abril de 2011 às 9:46 pm #99012burga
ParticipanteNo 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';29 de abril de 2011 às 10:45 pm #99014leandrolbs
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
)
29 de abril de 2011 às 11:05 pm #99015cads-info
ParticipanteBaseado 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 ended29 de abril de 2011 às 11:07 pm #99016VitorLeandro
ParticipanteAcho 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.campoYCorreto:
update A set A.campoA='70'
from tabelaA A, tabelaB B
where A.campoK=B.campoY
Testa aí..
29 de abril de 2011 às 11:53 pm #99020cads-info
ParticipanteFiz 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
30 de abril de 2011 às 12:04 am #99026leandrolbs
ParticipanteTente 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’
)30 de abril de 2011 às 12:26 am #99028cads-info
Participanteleandrolbs este comando SQL funcionou Perfeito!
Exatamente o que eu queria.
Podem marcar como resolvido.
Obrigado leandro e a todos que ajudaram.
30 de abril de 2011 às 12:31 am #99029burga
ParticipanteO seu dava erro porque UPDATE não tem FROM… A sintaxe é:
UPDATE [tabela] SET campo=valor [,campo=valor] WHERE [condições];
30 de abril de 2011 às 1:00 am #99031cads-info
Participanteburga
Entendi, obrigado.
Mas pode colocar o tópico como [RESOLVIDO].
2 de maio de 2011 às 7:43 am #99045rman
ParticipanteMuitos 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’4 de maio de 2011 às 7:52 pm #99075burga
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.
5 de maio de 2011 às 12:31 am #99087rman
Participanteburga,
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.colunaCreio que o teste foi feito em Oracle 10g, quem puder testar… No 11g não funciona…
-
AutorPosts
- Você deve fazer login para responder a este tópico.