Jump to content
Sign in to follow this  
diokhan

triggers sql [RESOLVIDO]

Recommended Posts

diokhan

boas,

eu no meu trabalho preciso de utilizar trigger, nunca utilizei antes, tive a estudar com uns tutoriais e a ler informações na Internet sobre trigger, fiz mas ao correr para experimentar não funcionou como deveria. alguém pode ajudar-me a perceber o que fiz de errado?

delimiter ;;

CREATE TRIGGER insertTrigger BEFORE INSERT ON BLAST
    FOR EACH ROW
        INSERT INTO BLAST_INDEX SET ID_BLAST_INDEX = NEW.ID_BLAST AND HIT_DESCRIPTION_INDEX = NEW.HIT_DESCRIPTION AND BLAST_EVALUE_INDEX = NEW.EVALUE;
;; 

----------------- (são script separados)

delimiter ;;

CREATE TRIGGER updateTrigger AFTER UPDATE ON BLAST
FOR EACH ROW 
	UPDATE BLAST_INDEX SET HIT_DESCRIPTION_INDEX = NEW.HIT_DESCRIPTION AND BLAST_EVALUE_INDEX = NEW.EVALUE WHERE ID_BLAST_INDEX = OLD.ID_BLAST;
;;

sempre que insiro um registo na tabela BLAST, na BLAST_INDEX onde supostamente deveria inserir o registo também fica com os campos a NULL e o ID_BLAST_INDEX que deve ser igual ao ID_BLAST fica a 0 :)

e tentei também o UPDATE mas fica na mesma com os campos a NULL e o ID a 0


...Join the dark side...and get a free cookie...

Share this post


Link to post
Share on other sites
M6

A sintaxe do comando insert standard não é essa, é Insert Into tabela (colunas) values (valores). Não sei se essa sintaxe funciona.

Se os campos ficam NULL é porque os valores originais vão a null. Por exemplo, se tiveres um ID que é auto-incremenado não sei se o mesmo já tem valor atribuído no before insert ou se só tem valor atribuído no after insert.


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."

 

Share this post


Link to post
Share on other sites
diokhan

troquei isto:

delimiter ;;

CREATE TRIGGER insertTrigger BEFORE INSERT ON BLAST
    FOR EACH ROW
        INSERT INTO BLAST_INDEX SET ID_BLAST_INDEX = NEW.ID_BLAST AND HIT_DESCRIPTION_INDEX = NEW.HIT_DESCRIPTION AND BLAST_EVALUE_INDEX = NEW.EVALUE;
;; 

por isto:

delimiter ;;

CREATE TRIGGER insertTrigger AFTER INSERT ON BLAST
    FOR EACH ROW
        INSERT INTO BLAST_INDEX (ID_BLAST_INDEX, HIT_DESCRIPTION_INDEX, BLAST_EVALUE_INDEX) VALUES (NEW.ID_BLAST, NEW.HIT_DESCRIPTION, NEW.EVALUE);
;; 

e funcionou como deve ser, obrigado pela dica M6 :)

só não percebi o porque de não dar antes, porque estava a seguir o tutorial da pagina do mysql 🤔


...Join the dark side...and get a free cookie...

Share this post


Link to post
Share on other sites
M6

Não devia estar a dar antes porque o campo era auto-incrementado.


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."

 

Share this post


Link to post
Share on other sites
diokhan

então quando for auto incrementado devo fazer o trigger para AFTER com a sintaxe standard certo? acho que já percebi a lógica :)


...Join the dark side...and get a free cookie...

Share this post


Link to post
Share on other sites
M6

Sim é isso.

Os campos auto-increment recebem o valor quando vão ser escritos na tabela, por isso antes de serem escritos não se sabe ainda o valor que vão receber.


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."

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • 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.