具有DECLARE值的MYSQL触发器

时间:2018-08-20 04:16:37

标签: mysql triggers declare

我想在触发器上使用声明来设置值。触发如下:

CREATE DEFINER=`root`@`localhost` TRIGGER `update_queue_after_insert` AFTER INSERT ON `encounter_note` FOR EACH ROW DECLARE is_exist INT;
  SET is_exist = ( SELECT count(*) FROM practice_last_updated_module WHERE practice_id = NEW.practice_id );

IF NEW.enc_source = 'OP' THEN
UPDATE practice_queue_list PQL SET
PQL.vital_check = IF (NEW.vs_weight <> 0 OR NEW.vs_height <> 0 OR NEW.  vs_temperature <> 0 OR LENGTH(NEW.vs_blood_pressure) > 0 <> NEW.vs_pulse <> 0 OR NEW.vs_respiration <> 0, 1, 0)
WHERE PQL.encounter_id = NEW.id AND PQL.practice_place_id = NEW.practice_id;
END IF;

IF is_exist > 0 THEN
      UPDATE practice_last_updated_module SET encounter = UNIX_TIMESTAMP(NOW()) where practice_id = NEW.practice_id;
ELSE:
    INSERT INTO practice_last_updated_module (practice_id, encounter) VALUES (NEW.practice_id, UNIX_TIMESTAMP(NOW()));
END IF;"

但是保存时返回错误

  

以下查询失败:“ CREATE DEFINER = root @ localhost   插入update_queue_after_insert后触发encounter_note   对于每个行声明,is_exist INT; SET is_exist =(SELECT count(*)   在Practice_last_updated_module中

该语句出了什么问题?

1 个答案:

答案 0 :(得分:1)

使用13.6.1 BEGIN ... END Compound-Statement Syntax

尝试(也许您需要使用DELIMITER):

DELIMITER //

CREATE TRIGGER `update_queue_after_insert` AFTER INSERT ON `encounter_note`
FOR EACH ROW
BEGIN -- <- BEGIN
  DECLARE is_exist INT;
  SET is_exist = ( SELECT count(*) FROM practice_last_updated_module WHERE practice_id = NEW.practice_id );

  IF NEW.enc_source = 'OP' THEN
    UPDATE practice_queue_list PQL
    SET PQL.vital_check = IF (NEW.vs_weight <> 0 OR NEW.vs_height <> 0 OR NEW.vs_temperature <> 0 OR LENGTH(NEW.vs_blood_pressure) > 0 <> NEW.vs_pulse <> 0 OR NEW.vs_respiration <> 0, 1, 0)
    WHERE PQL.encounter_id = NEW.id AND PQL.practice_place_id = NEW.practice_id;
  END IF;

  IF is_exist > 0 THEN
    UPDATE practice_last_updated_module SET encounter = UNIX_TIMESTAMP(NOW()) where practice_id = NEW.practice_id;
  -- ELSE:
  ELSE 
    INSERT INTO practice_last_updated_module (practice_id, encounter) VALUES (NEW.practice_id, UNIX_TIMESTAMP(NOW()));
  END IF;
END// -- <- END

DELIMITER ;