Jump to content

Como corrigir o erro ORA-00933 em um comando UPDATE com JOIN no Oracle?


alessandro.cardoso
Ir para a Solução Solucionado por Tiago Neves,

Postagens Recomendadas

Me ajudem a identificar o erro nessa Select?
 

UPDATE SBZ010 SET BZ_TRIBMUN = '140131'
FROM SBZ010
LEFT JOIN SB1010
ON BZ_CODFOR = B1_CODFOR 
WHERE 
B1_DESC LIKE 'SERV. ALINHA%'  AND
B1_GRUPO = '0014'             AND
BZ_CODFOR = 'SE0150'          AND
BZ_FILIAL = '32'              AND
SBZ010.D_E_L_E_T_ <> '*'      AND
SB1010.D_E_L_E_T_ <> '*' 


O comando de saída é :

Erro de SQL: ORA-00933: comando SQL não encerrado adequadamente
00933. 00000 -  "SQL command not properly ended"

 

Eu preciso setar um campo na tabela , no caso BZ_TRIBMUN conforme as condições do Where abaixo. No caso envolve 2 tabelas SBZ010 e SB1010

  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Solução

Fala, @alessandro.cardoso.
 

O erro na sua consulta SQL está na utilização do FROM em um comando UPDATE. Em Oracle SQL, a sintaxe para um UPDATE com junção é diferente da que você está tentando usar. A sintaxe correta é utilizando uma subquery SELECT ou uma junção de tabelas de maneira específica para Oracle.

Abaixo está uma maneira de fazer isso utilizando uma subquery:
 

UPDATE SBZ010
SET BZ_TRIBMUN = '140131'
WHERE BZ_CODFOR = 'SE0150'
  AND BZ_FILIAL = '32'
  AND D_E_L_E_T_ <> '*'
  AND EXISTS (
    SELECT 1
    FROM SB1010
    WHERE BZ_CODFOR = B1_CODFOR
      AND B1_DESC LIKE 'SERV. ALINHA%'
      AND B1_GRUPO = '0014'
      AND D_E_L_E_T_ <> '*'
  );

 

Neste exemplo, a subquery no EXISTS verifica se há uma correspondência na tabela SB1010 que satisfaz as condições especificadas. Se tal correspondência existir, a linha na tabela SBZ010 será atualizada.

Aqui está um exemplo usando uma junção para fazer o UPDATE:
 

MERGE INTO SBZ010 tgt
USING (
  SELECT BZ_CODFOR, BZ_FILIAL
  FROM SBZ010 z
  JOIN SB1010 b
  ON z.BZ_CODFOR = b.B1_CODFOR
  WHERE b.B1_DESC LIKE 'SERV. ALINHA%'
    AND b.B1_GRUPO = '0014'
    AND z.BZ_CODFOR = 'SE0150'
    AND z.BZ_FILIAL = '32'
    AND z.D_E_L_E_T_ <> '*'
    AND b.D_E_L_E_T_ <> '*'
) src
ON (tgt.BZ_CODFOR = src.BZ_CODFOR AND tgt.BZ_FILIAL = src.BZ_FILIAL)
WHEN MATCHED THEN
  UPDATE SET tgt.BZ_TRIBMUN = '140131';

 

No comando MERGE, nós especificamos a tabela SBZ010 como o alvo (tgt) e a tabela derivada da subquery como a origem (src). A atualização é realizada nas linhas da tabela alvo que correspondem às condições especificadas na junção.

Escolha a abordagem que melhor se adapta ao seu cenário e ao seu banco de dados.

fonte: https://pt.stackoverflow.com/questions/37844/oracle11g-problemas-comando-select

  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Casa do Desenvolvedor mudou o título para Como corrigir o erro ORA-00933 em um comando UPDATE com JOIN no Oracle?

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...