Teradata SQL Assistant中替换触发器语法报错求助
触发器语法错误修正方案
错误分析
你的触发器存在两个关键语法问题:
- CASE表达式未闭合:SQL的CASE语句必须以
END收尾,原代码中else 'No'后缺失END,导致语法解析中断,这也是你收到错误提示的核心原因。 - 错误引用新行数据:在INSERT触发器中,需要通过定义的
New_Row引用新插入的行字段,而非直接用表名air_table调用字段,否则会引发字段引用逻辑错误。
修正后的触发器代码
REPLACE TRIGGER Database_Update_Trigger AFTER INSERT ON Air_Table REFERENCING NEW AS New_Row FOR EACH ROW BEGIN INSERT INTO Database_Update (Updated, Table_Name, Run_Dt) VALUES ( CASE WHEN MONTH(New_Row.run_dt) >= MONTH(CURRENT_DATE) AND YEAR(New_Row.run_dt) >= YEAR(CURRENT_DATE) THEN 'Yes' ELSE 'No' END, 'Air_Table', New_Row.run_dt ); END;
额外说明
- 若你的数据库不支持
REPLACE TRIGGER(如MySQL),首次创建时可替换为CREATE TRIGGER:
CREATE TRIGGER Database_Update_Trigger AFTER INSERT ON Air_Table REFERENCING NEW AS New_Row FOR EACH ROW BEGIN INSERT INTO Database_Update (Updated, Table_Name, Run_Dt) VALUES ( CASE WHEN MONTH(New_Row.run_dt) >= MONTH(CURRENT_DATE) AND YEAR(New_Row.run_dt) >= YEAR(CURRENT_DATE) THEN 'Yes' ELSE 'No' END, 'Air_Table', New_Row.run_dt ); END;
- 若你需要严格判断
Run_Dt是否为当月,可将条件调整为:YEAR(New_Row.run_dt) = YEAR(CURRENT_DATE) AND MONTH(New_Row.run_dt) = MONTH(CURRENT_DATE)。
内容的提问来源于stack exchange,提问作者Tanya B.
相关产品推荐
相关产品推荐

