u011681178
hongzhi19901216
采纳率0%
2017-04-11 06:54 阅读 789

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

120

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • smnzg smnzg 2017-04-11 09:27

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

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

    点赞 评论 复制链接分享
  • samzhu samzhu 2017-12-22 01:17

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

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

    点赞 评论 复制链接分享

相关推荐