【问题标题】:How to create Teradata trigger (after insert update)?如何创建 Teradata 触发器(插入更新后)?
【发布时间】:2022-01-01 22:12:42
【问题描述】:

我正在尝试消除空值而不使列“非空”以避免错误。因此,我想创建一个触发器来更新每个插入的行,如果它包含 null 以将其替换为“N”。以下语法导致

“作为单个语句执行。失败 [5423 : HY000] 此触发器包含无效的 REFERENCING 子句。 经过时间 = 00:00:00.018 声明 1:替换失败。 "

语法:

Replace  TRIGGER DB.C_UP_CLIENTS
AFTER INSERT ON DB.CLIENTS
REFERENCING OLD table as old_clients_table
 NEW table  as new_clients_table
 FOR EACH Statement
(update DB.CLIENTS set NEEDS_AUTHENTICATION = 'N' where NEEDS_AUTHENTICATION is null;);

【问题讨论】:

  • 在 INSERT 触发器中不能有 OLD TABLE 引用,并且应该在触发器主体中使用 NEW TABLE 别名,而不是目标表本身。但是您的描述听起来像是带有 WHEN / SET 的 BEFORE INSERT ROW 触发器可能更适用。

标签: sql triggers teradata teradata-sql-assistant teradatasql


【解决方案1】:

正如 Fred 所说,我们没有用于 INSERT TRIGGER 的 OLD 表。我会这样做(在 BEFORE INSERT 触发器中):

REPLACE TRIGGER DB.C_UP_CLIENTS ENABLED 
BEFORE INSERT ON DB.CLIENTS
REFERENCING NEW AS NEW_VALUE
FOR EACH ROW
BEGIN ATOMIC(
    SET NEW_VALUE.NEEDS_AUTHENTICATION =coalesce(NEW_VALUE.NEEDS_AUTHENTICATION ,'N');
    )
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 2021-03-08
    • 2020-08-23
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多