首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发器语法和IF ELSE THEN

触发器语法和IF ELSE THEN
EN

Stack Overflow用户
提问于 2011-03-11 18:53:53
回答 1查看 64.6K关注 0票数 1

我想创建一个触发器来计算具有特定id (id_ort)的行数。如果它发现超过5行,我需要递增一个变量。

触发器语法

代码语言:javascript
复制
BEGIN
DECLARE nb INT;
DECLARE nba INT;

SET nba =0;


SET NEW.`VPLS_ID_NodeB` = CONCAT("21100", LPAD(NEW.`VPLS_ID_NodeB`,4,0));


SET nb = (SELECT COUNT(DISTINCT(`VPLS_ID_aggregation`)) FROM `VPLS_nodeB` WHERE `id_ORT` = NEW.`id_ORT`);

IF(nb > 5) THEN
SET nba = nb + 1;
ELSE
SET nba = nb;
END IF;


SET NEW.`VPLS_ID_aggregation` = CONCAT("21188", LPAD(NEW.`id_ORT`,2,0), LPAD(nba,2,0));
END

然而,有一个bug...即使我的行数少于5行,var也会每次递增。

有什么想法吗?也许是语法问题..。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-11 19:14:24

您可能忘了指定分隔符,我还做了一些其他更改,如您所见

代码语言:javascript
复制
delimiter #

create trigger VPLS_nodeB_before_ins_trig before insert on VPLS_nodeB
for each row

BEGIN
DECLARE nb INT default 0;
DECLARE nba INT default 0;

SET NEW.VPLS_ID_NodeB = CONCAT('21100', LPAD(NEW.VPLS_ID_NodeB,4,0));
SET nb = (SELECT COUNT(DISTINCT(VPLS_ID_aggregation)) FROM VPLS_nodeB WHERE id_ORT = NEW.id_ORT);

IF(nb > 5) THEN
    SET nba = nb + 1;
ELSE
    SET nba = nb;
END IF;

SET NEW.VPLS_ID_aggregation = CONCAT('21188', LPAD(NEW.id_ORT,2,0), LPAD(nba,2,0));

END#

delimiter ;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5271997

复制
相关文章

相似问题

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