概述
达梦数据库的替代(instead of )触发器使用一例
- 1. 使用场景说明
- 2. 场景举例
- 3. 实现
- 3.1 创建表
- 3.2 编写触发器
- 4.测试
- 4.1 预期结果
- 4.2 测试截图
- 5.结束语
1. 使用场景说明
在某些连续运行的数据库应用场景中,经常使用一段后台程序(通常做成守护进程)对数据进行自动入库,如气象或地震部门的资料收集成序就是这样,当源数据有修改时,也需要对数据库进行更新,使数据库中的数据保持最新。如果使用高级编程语言程序来实现也是可以的,但是有一个缺点,就是要多次查询数据库,一旦数据已存在,则进行update,否则进行插入操作。如果用instead触发器来做,高级语言程序则可以非常简单,且可以降低通信次数,效率将有所提高。
2. 场景举例
利用Instead of 触发器,首先利用new表检查是否满足数据插入条件,如果满足则进行插入,否则就进行更新。
比如有个气象台站的数据表如下:
站号 时间 气温 气压 雨量 风速 风向
56778 2021-01-12 13:00:00 12 1019 0 2 120
56765 2021-01-12 13:00:00 16 1011 0 3 135
56796 2010-01-12 13:00:00 18 900 3.5 4 232
… … … … … … …
一般台站正常情况下传上来的报文会即时入库,但有时仪器有偏差时,需要人工更正后再传更正报对预先插入的数据进行修正,这时由于数据库表中已有一条数据,需要对其进行修改,使数据库中的数据正确,用前端程序实现首先得判断有没有这条数据,有的话则更行update操作,否则进行insert操作。如果采用instead of 触发器实现,则可以很容易解决这个问题,客户端只须进行插入就可以了,不需要判断逻辑,程序将会清晰很多。
3. 实现
3.1 创建表
连接达梦数据库,创建一张weather的表:CREATE TABLE WEATHER(STATION_ID CHAR(5),RTIME TIMESTAMP,
TEMP FLOAT DEFAULT -273.15,PRESSURE FLOAT DEFAULT -999,RAIN FLOAT DEFAULT -999,WIND_V FLOAT,WIND_D FLOAT)
3.2 编写触发器
CREATE OR REPLACE TRIGGER tri_weather_insert
INSTEAD OF INSERT ON V_WEATHER–替换原来的insert语句
FOR EACH ROW
BEGIN
if not exists(SELECT * FROM WEATHER WHERE station_id=:new.station_id AND rtime=:new.rtime) THEN–没有则插入
INSERT INTO WEATHER(station_id,rtime,temp,pressure,rain,wind_v,wind_d) VALUES(:new.station_id,:new.rtime,:new.temp,:new.pressure,:new.rain,:new.wind_v,:new.wind_d);
ELSE --有则更新
UPDATE WEATHER SET temp=:new.temp,pressure=:new.pressure,rain=:new.rain,wind_v=:new.wind_v,wind_d=:new.wind_d
WHERE station_id=:new.station_id AND rtime=:new.rtime;
END IF;
END;
4.测试
4.1 预期结果
当向视图中插入一条新的记录时,表上应执行插入(INSERT)操作;当向视图中插入原有台站同一个时间的数据时,则执行更新(UPDATE)操作。
4.2 测试截图
插入三条记录后,表中记录如上图所示。当第一条记录的雨量(RAIN)更正为5时,再执行一条如下的语句,则表中的记录变为:
插入三条记录后,表中记录如上图所示。当第一条记录的雨量(RAIN)更正为5时,再执行一条如下的语句,则表中的记录变为:
这样就实现了气象台站数据的自动更正,不需要采用前端代码进行数据逻加判断。
5.结束语
采用数据库触发器、存储过程可以提高程序的通信效率,可以简化编程。作为数据库管理、开发员或数据架构师,有时需要从数据库的角度去帮助团队考虑数据架构的优化问题,使自已在团队中获得加分。
最后
以上就是害羞草莓为你收集整理的达梦数据库的替代(instead of )触发器使用一例1. 使用场景说明2. 场景举例3. 实现4.测试5.结束语的全部内容,希望文章能够帮你解决达梦数据库的替代(instead of )触发器使用一例1. 使用场景说明2. 场景举例3. 实现4.测试5.结束语所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复