如何在 SAP HANA 触发器中更新相同的 table
How to update the same table in SAP HANA Triggers
我正在尝试在 SAP HANA 中编写一个触发器,以在将新记录插入 table 时更新 table 的字段。以下是我编写的示例触发器。
CREATE TRIGGER SAMPLE
AFTER INSERT ON TARGET_TABLE
REFERENCING NEW ROW NEW_ROW
FOR EACH ROW
BEGIN
UPDATE TARGET_TABLE SET VALID_FROM='2018-02-01' WHERE ITEM=:NEW_ROW.ITEM
END
当我尝试这个时,我得到了错误,Modification of subject table in trigger not allowed
。
有什么方法可以实现吗?
https://archive.sap.com/discussions/thread/3651854建议使用transition变量NEW_ROW
,如能提供代码示例,不胜感激
您实际上不需要为您的要求创建触发器,正如我从您的 post 中看到的那样(当然,如果它只是更新日期字段)
您可以使用默认值
定义VALID_FROM列
例如,
Create Column Table DefaultColumnTable (
Id int,
Code varchar(5),
VALID_FROM date default '2018-02-01'
)
因此,无论何时插入新行,除非指定替代值,否则 valid_from 列将填充上面 DDL 命令中指定的默认日期。
用户可以毫无问题地更改 valid_from 字段值
@Kalpa,也许你可以使用 BEFORE INSERT 触发器
请检查以下示例
create trigger TriggerTable_B_INS BEFORE INSERT on TriggerTable
REFERENCING NEW ROW mynewrow
FOR EACH ROW
begin
declare lv_d date;
lv_d := '20180201';
mynewrow.VALID_FROM = :lv_d;
end;
在目标 table 上执行插入命令之前,您仅设置了新的行列。
您无需显式执行 INSERT 命令,只需为新行列设置新值。就这些了
希望对你有帮助
我正在尝试在 SAP HANA 中编写一个触发器,以在将新记录插入 table 时更新 table 的字段。以下是我编写的示例触发器。
CREATE TRIGGER SAMPLE
AFTER INSERT ON TARGET_TABLE
REFERENCING NEW ROW NEW_ROW
FOR EACH ROW
BEGIN
UPDATE TARGET_TABLE SET VALID_FROM='2018-02-01' WHERE ITEM=:NEW_ROW.ITEM
END
当我尝试这个时,我得到了错误,Modification of subject table in trigger not allowed
。
有什么方法可以实现吗?
https://archive.sap.com/discussions/thread/3651854建议使用transition变量NEW_ROW
,如能提供代码示例,不胜感激
您实际上不需要为您的要求创建触发器,正如我从您的 post 中看到的那样(当然,如果它只是更新日期字段)
您可以使用默认值
定义VALID_FROM列例如,
Create Column Table DefaultColumnTable (
Id int,
Code varchar(5),
VALID_FROM date default '2018-02-01'
)
因此,无论何时插入新行,除非指定替代值,否则 valid_from 列将填充上面 DDL 命令中指定的默认日期。
用户可以毫无问题地更改 valid_from 字段值
@Kalpa,也许你可以使用 BEFORE INSERT 触发器 请检查以下示例
create trigger TriggerTable_B_INS BEFORE INSERT on TriggerTable
REFERENCING NEW ROW mynewrow
FOR EACH ROW
begin
declare lv_d date;
lv_d := '20180201';
mynewrow.VALID_FROM = :lv_d;
end;
在目标 table 上执行插入命令之前,您仅设置了新的行列。 您无需显式执行 INSERT 命令,只需为新行列设置新值。就这些了
希望对你有帮助