触发器编写:保留最新20条记录

Lordy 2006-06-16 05:50:45
有个表 trans
字段 userid int; transdate datetime; price int;

当插入trans时,如果select count(*) from trans where userid=插入的userid 超过20条记录,
则根据transdate排序,删除最早的那一条记录

这个触发器如何写?
...全文
141 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
huiwsey 2006-06-16
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER TRG_TEST_AFTER_INSERT
BEFORE
INSERT
ON TEST
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
row_count INTEGER;
BEGIN
--
SELECT COUNT (*)
INTO row_count
FROM TEST;

IF row_count > 20
THEN
DELETE TEST
WHERE transdate = (SELECT MIN (transdate)
FROM TEST);
END IF;
END trg_test_after_insert;



这个可以实现,不过你要是想确保20条以内,可以在if 判断时加一个while 循环,删除到20条以下才执行insert操作。

oracle 9.2下测试通过。

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧