为oracle数据库编写触发器或者存储过程

为oracle数据库编写触发器或者存储过程,在表名为send的表中有一个字段sengflag(字符类型为char(1)),该字段默认值是0,当要插入此表中的数据此字段为0时,则数据立即插入;当要插入此字段的值为1时,则此行数据延迟到第二天的9:30分再插入send表。

方法一:
创建tmp表,当send_flag=1时,先将数据插入tmp,并标明时间是yyyy-mm-dd 09:30。
存储过程每次先扫描tmp表,发现可以将数据插入后,将数据从tmp表移到sender表。

方法二:
sender表增加字段,标明此行数据预计发送时间,以及生效状态。
当发现send_flag=1时,更新此字段为yyyy-mm-dd 09:30,并标为不生效。
每次扫描该表,当时间到时,将生效状态改为生效

不建议用触发器,因为“延迟到第二天的9:30分再插入send表”时同样会触发触发器,会造成死循环;

用存储过程的话必须使用JOB,可能会由于异常而不被执行;
最好的做法是就在原表中加个时间字段,在所有与表相关的查询中以该字段为条件过滤。