Синтаксическая ошибка в триггере MySQL - PullRequest
3 голосов
/ 20 марта 2012

Я пытаюсь выяснить, что не так с этим триггером. Я новичок в триггерах и хранимых процедурах mysql, поэтому я предполагаю, что с синтаксисом что-то не так.

-- Trigger DDL Statements
DELIMITER $$

USE `SNPB`$$

DROP TRIGGER IF EXISTS getMsnps$$
CREATE TRIGGER getMsnps AFTER INSERT ON m_snps
FOR EACH ROW 
BEGIN

    DECLARE glid int(10);
    DECLARE lost int(1);
    DECLARE st int(10);
    DECLARE vto varchar(20);

    IF(EXISTS( SELECT glyc_id  FROM glyc WHERE glyc_start<=NEW.uni_pos AND glyc_end>=NEW.uni_pos AND glyc.uni_prot_ac=NEW.uni_prot_ac)) THEN
    SELECT glyc_id,glyc_start INTO glid,st  FROM glyc WHERE glyc_start<=NEW.uni_pos AND glyc_end>=NEW.uni_pos AND glyc.uni_prot_ac=NEW.uni_prot_ac;    
    SELECT all_snps.var_to INTO vto FROM all_snps,snp_map WHERE snp_map.snpb_id=NEW.snpb_id AND snp_map.ref>0 AND snp_map.all_snps_id=all_snp.all_snps_id;
    set lost=0;     
    IF NEW.uni_pos=st AND vto!='n' AND vto!='N' THEN
        set lost=1;
    END IF;
    IF NEW.uni_pos=st+1 AND (vto='p' OR vto='P') THEN
        set lost=1;
    END IF;
    IF NEW.uni_pos=st+2 AND vto!='s' AND vto!='S' AND vto!='t' AND vto!='T' THEN
        set lost=1;
    END IF;
    INSERT INTO glyc_map (glyc_id,snpb_id,loss)  VALUES (glid,NEW.snpb_id,lost);

END IF;  
END;
$$
DELIMITER ;

Поэтому, когда я вставляю строки в таблицу "m_snps" (несколько строк вставляются одним оператором), я должен получить несколько строк в таблице "glyc_map", но этого никогда не происходит. Я надеялся, что кто-нибудь скажет мне, правильный ли синтаксис или нет.

1 Ответ

0 голосов
/ 18 июля 2012

Весь ваш код находится в пределах IF:

IF(EXISTS( SELECT glyc_id  FROM glyc ...
    -- rest of code, including the insert statement
END IF;

Если условие ложно, ничего не произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...