达梦数据库触发器示例
达梦数据库触发器示例
create or replace trigger "DEMOS"."user insert to user_real"
after INSERT
on "DEMOS"."USER"
referencing OLD ROW AS "OLD" NEW ROW AS "NEW"
for each row
BEGIN
/*触发器体*/
insert into
"DEMOS"."USER_REAL"
(
"ID" ,
"NAME" ,
"AGE" ,
"CREATE_TIME",
"UPDATE_TIME",
"ROLE_ID"
)
VALUES
(
NEW."ID",
NEW."NAME",
NEW."AGE" ,
NEW."CREATE_TIME" ,
NEW."UPDATE_TIME" ,
NEW."ROLE_ID"
);
END;
在达梦数据库中,有三种不同的触发器类型:表级触发器(Table Trigger)、库级触发器(Database Trigger)和模式级触发器(Schema Trigger)。它们之间的区别如下:
- 表级触发器(Table Trigger):
- 作用范围:仅在指定的表上触发。
- 创建和管理:表级触发器是针对具体表创建和管理的,可以通过在表上使用
CREATE TRIGGER
语句来定义。 - 触发事件:可以在插入、更新或删除表中的数据时触发,可以在
AFTER
或BEFORE
事件发生时执行相应的操作。 - 访问数据:可以使用
NEW
和OLD
伪记录引用新旧数据。
- 库级触发器(Database Trigger):
- 作用范围:在整个数据库中的表上触发。
- 创建和管理:库级触发器是与数据库关联的,创建和管理库级触发器需要使用特定的语法,如
CREATE DATABASE TRIGGER
。 - 触发事件:可以在库中的任何表上的插入、更新或删除操作时触发,可以在
AFTER
或BEFORE
事件发生时执行相应的操作。 - 访问数据:可以使用
NEW
和OLD
伪记录引用新旧数据。
- 模式级触发器(Schema Trigger):
- 作用范围:在指定模式下的所有表上触发。
- 创建和管理:模式级触发器是与特定模式关联的,创建和管理模式级触发器需要使用特定的语法,如
CREATE SCHEMA TRIGGER
。 - 触发事件:可以在模式中的任何表上的插入、更新或删除操作时触发,可以在
AFTER
或BEFORE
事件发生时执行相应的操作。 - 访问数据:可以使用
NEW
和OLD
伪记录引用新旧数据。
总结:
- 表级触发器是针对特定表的触发器,仅在该表上触发;
- 库级触发器是针对整个数据库的触发器,作用于数据库中的所有表;
- 模式级触发器是针对指定模式下的所有表的触发器,作用范围在特定模式内的所有表。
根据需求和业务逻辑,您可以选择适当的触发器类型来满足您的需求。
-
这是改进后的
再插入时判断有没有name值相同的记录,如果有则更新,没有则插入,并且加了异常捕捉,不会影响到原表的插入。
create or replace trigger "DEMOS"."user insert to user_real2"
AFTER INSERT ON "DEMOS"."USER"
FOR EACH ROW
BEGIN
/*触发器体*/
MERGE INTO "DEMOS"."USER_REAL" t
USING (
SELECT
:NEW."ID" as "ID",
:NEW."NAME" as "NAME",
:NEW."AGE" AS "AGE" ,
:NEW."CREATE_TIME" AS "CREATE_TIME" ,
:NEW."UPDATE_TIME" AS "UPDATE_TIME" ,
:NEW."ROLE_ID" AS "ROLE_ID"
) s
ON (t.name = s.name)
WHEN MATCHED THEN
UPDATE SET t.id = s.id, t.age = s.age,t.CREATE_TIME = s.CREATE_TIME,t.update_time = s.update_time,t.role_id = s.role_id
WHEN NOT MATCHED THEN
insert
(
"ID" ,
"NAME" ,
"AGE" ,
"CREATE_TIME",
"UPDATE_TIME",
"ROLE_ID"
)
VALUES
(
:NEW."ID",
:NEW."NAME",
:NEW."AGE" ,
:NEW."CREATE_TIME" ,
:NEW."UPDATE_TIME" ,
:NEW."ROLE_ID"
);
EXCEPTION
-- 捕获异常,可以进行日志记录或其他操作
WHEN OTHERS THEN
-- 处理异常,可以根据需要进行逻辑处理
NULL;
END;