首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有声明值的MYSQL触发器

带有声明值的MYSQL触发器
EN

Stack Overflow用户
提问于 2018-08-20 04:16:36
回答 1查看 4.3K关注 0票数 1

我想要设置值使用声明的触发器。触发器如下:

代码语言:javascript
复制
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;"

但它在保存时返回错误。

以下查询失败:“在为每一行声明DEFINER= is_exist INT插入encounter_note后创建encounter_note@localhost触发器update_queue_after_insert;设置is_exist =(从practice_last_updated_module中选择count(*) )

这句话怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 04:55:12

使用13.6.1开始..。结束复合-报表语法

试一试(也许你需要使用分隔符):

代码语言:javascript
复制
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 ;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51924090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档