You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Teradata SQL Assistant中替换触发器语法报错求助

触发器语法错误修正方案

错误分析

你的触发器存在两个关键语法问题:

  1. CASE表达式未闭合:SQL的CASE语句必须以END收尾,原代码中else 'No'后缺失END,导致语法解析中断,这也是你收到错误提示的核心原因。
  2. 错误引用新行数据:在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:54:57