我写了这个触发器,根据客户的收入来更新列......
CREATE TRIGGER `TRG_CUST_CODE` BEFORE INSERT ON `CUSTOMER_DIM`
FOR EACH ROW SET NEW.CUST_INCOME_AM = IF(NEW.CUST_INCOME_AM >= 55000, "H",
IF(NEW.CUST_INCOME_AM >= 40000 and NEW.CUST_INCOME_AM < 55000, "M",
IF(NEW.CUST_INCOME_AM >= 15000 AND NEW.CUST_INCOME_AM < 40000, "L","P"))
)
然而,所有的值都设置为P ......我错过了一些我在看的东西吗?
答案 0 :(得分:0)
我不能代表您的数据,但我会将此触发器写为:
CREATE TRIGGER `TRG_CUST_CODE` BEFORE INSERT ON `CUSTOMER_DIM`
FOR EACH ROW
BEGIN
SET NEW.CUST_INCOME_AM = (CASE WHEN NEW.CUST_INCOME_AM >= 55000
THEN 'H'
WHEN NEW.CUST_INCOME_AM >= 40000 and NEW.CUST_INCOME_AM < 55000
THEN 'M'
WHEN NEW.CUST_INCOME_AM >= 15000 AND NEW.CUST_INCOME_AM < 40000
THEN 'L'
ELSE 'P'
END);
END;
答案 1 :(得分:0)
你要替换这个值有点奇怪。这不是无效的,只是看起来有点奇怪。
表达式正在测试列CUST_INCOME_AM
的值,然后为该列分配值。
鉴于您报告结果返回为“P”,表明该列是字符数据类型(例如CHAR或VARCHAR)。
您确定要与数字值进行比较吗?
通常,我们希望有一个我们正在比较的数字(例如INTEGER,DECIMAL)列。
DELIMITER $$
DROP TRIGGER IF EXISTS `TRG_CUST_CODE` $$
CREATE TRIGGER `TRG_CUST_CODE`
BEFORE INSERT ON `CUSTOMER_DIM`
FOR EACH ROW
BEGIN
SET NEW.varchar_col
= IF(NEW.numeric_col >= 55000
,'H'
,IF(NEW.numeric_col >= 40000
,'M'
,IF(NEW.numeric_col >= 15000
,'L'
,'P'
)
)
);
END$$
DELIMITER ;