【问题标题】:MYSQL TRIGGER with DECLARE value带有 DECLARE 值的 MYSQL TRIGGER
【发布时间】:2019-01-26 04:34:27
【问题描述】:

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

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 FOR EACH ROW DECLARE is_exist INT; SET is_exist = ( 选择计数(*) FROM practice_last_updated_module WHERE

这句话有什么问题?

【问题讨论】:

    标签: mysql triggers declare


    【解决方案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 ;
    

    【讨论】:

    • 知道了,加上BEGIN和END,就可以了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多