Jump to content

Criação de trigger que só funciona com AFTER INSERT e não com AFTER UPDATE


RGomes74

Recommended Posts

Boa tarde,

Venho aqui para recorrer à vossa ajuda, porque estou bloqueado e já não sei o que fazer.

Eu estou a tentar fazer um trigger que me permita atualizar alguns campos de uma tabela, tendo por base o valor doutra tabela. No entanto, eu até consigo deixar o trigger a funcionar com a condição AFTER INSERT, mas não consigo deixar a funcionar com o AFTER UPDATE. Já simplifiquei coisas, editei código, adicionei e acrescentei variáveis, mas não estou a perceber o que estou a fazer mal para que isto não funcione com o AFTER UPDATE. Pus o código mais simples que tenho aqui, porque já sei se as mudanças que andei para aqui a fazem o mínimo sentido, mas como não tinha resultados, não quis inventar mais.

Alguém consegue explicar-me o que estou a fazer de errado?

Obrigado.

BEGIN
update documentsheaders
inner join  entity_stockdocument_extrafields on entity_stockdocument_extrafields.StockDocument_id=documentsheaders.id
set 
documentsheaders.entitykeyid=entity_stockdocument_extrafields.entity
where 
documentsheaders.DocumentKeyId='ES' and
documentsheaders.entitykeyid<>entity_stockdocument_extrafields.entity
update documentsheaders
inner join entities on entities.KeyId=documentsheaders.EntityKeyId
set 
documentsheaders.EntityDescription=entities.Name
where 
documentsheaders.DocumentKeyId='ES' and
documentsheaders.EntityKeyId=entities.KeyId;
END
Link to comment
Share on other sites

21 horas atrás, M6 disse:

Não percebi o código que tens. O que está entre esse BEGIN e END é o trigger ou o update que despoleta o trigger?

Boa tarde.

É o trigger em si.

Basicamente, eu tenho uma tabela entity_stockdocument_extrafields que vai ter um campo preenchido por uma pessoa. Este valor será chave primária na tabela entities. Qual é o objetivo? Atualizar a tabela documentsheaders com base no valor preenchido na tabela entity_stockdocument_extrafields, indo buscar à tabela entities os dados que me falta, porque a tabela entity_stockdocument_extrafields não traz todos os dados.

 

Se eu usar as queries individualmente, elas funcionam. Só que eu não estou muito habituado a fazer triggers, acho que deve ser o meu segundo trigger que estou a fazer e estou a sentir dificuldades em passar para o código o que quero fazer na teoria.

 

obrigado.

Link to comment
Share on other sites

Acho que há aí demasiada confusão para um trigger tão simples.

Assim de caras, não te vejo a usar as keywords OLD nem NEW, que são os modificadores que têm contém os valores antes e depois do evento (nem todos existem em todos os eventos).

Pelo que compreendi, basta fazeres um update a um campo de uma tabela usando o valor NEW, mas aconselho-te a compreenderes como funciona um trigger antes de avançares.
Este tutorial de triggers de MySQL explica a coisa de forma bastante simples: https://www.mysqltutorial.org/mysql-triggers/

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.