1
resposta

[Dúvida] Estrutura do Update - Exercício Exists

Na questão desse exercício é pedido que seja feito um Update de acordo da mesma forma que foi feito na aula anterior só que com os dados dos exercícios que estão sendo feitos ao longo desse curso. Ao responder a questão, deu certo a questão A

Resposta da questão

Porém ao fazer o teste na minha máquina gerava o seguinte erro:

Erro Oracle

O que me pareceu estranho pois, na estrutura estava certo. Porém identifiquei que o SQL Developer não entendeu o Alias dado ao tab_projeto da mesma forma que identificou o tab_projeto_orcamento como "tbo":

Sessão Update

Eu tentei fazer o Update sem os alias e deu certo:

Sessão Update correto

Porém não compreendi do por quê não aceitar o alias ainda sim. Se alguém puder me explicar eu agradeço!

1 resposta

Oi Maya! Como você está?

Desculpe por demorar a te responder.

Maya, uma possibilidade é que a repetição do alias na subconsulta tenha causado uma "confusão" no Oracle. Uma forma de evitar que isso aconteça é dando outro apelido para a tabela que está sendo referenciada na subconsulta, assim:

UPDATE TAB_PROJETO P
SET P.ORCAMENTO = P.ORCAMENTO * (1 + (
    SELECT TBO.PERCENTUAL_NOVO_ORCAMENTO
    FROM TAB_PROJETO_ORCAMENTO TBO
    WHERE P.COD_PROJETO = TBO.COD_PROJETO
))
WHERE EXISTS (
    SELECT 1
    FROM TAB_PROJETO_ORCAMENTO TBO2
    WHERE P.COD_PROJETO = TBO2.COD_PROJETO
);

Esse tipo de erro por aliases repetidos não é super comum, mas pode acontecer quando o BD identifica algum tipo de redundância. Aqui no meu BD, por exemplo, o código do exercício rodou corretamente.

Espero ter ajudado de alguma forma. Abraços!