我有一个这样的触发器:
DECLARE v1 VARCHAR(4);
and so on declaration
...
IF LENGTH(new.ID) < 11 OR new.ID= '' THEN
RAISERROR 23004 'Too short!';
ENDIF;
SET v1 = substring(new.ID,1,3);
and more action on v1...
我想说的是set
部分是在if
之前执行的,我不知道为什么。你知道如何解决它吗?
提前致谢
答案 0 :(得分:1)
在触发器中编码的早期代码之前,没有办法执行更晚的代码。
您的触发器正在执行两次。
第一次执行将id截断为3个字符 第二次执行由于id太短而爆炸(因为第一次执行)。
你需要弄清楚它被调用两次的原因。
可能的修复,如果你无法阻止它被调用两次,可能是允许长度为3:
IF LENGTH(new.ID) < 11 AND LENGTH(new.ID) != 3 THEN
RAISERROR 23004 'Too short!';
ENDIF;
请注意,测试长度小于11的测试将涵盖空白测试。