oracle - 我应该如何构造一个 Oracle 函数或其他代码来测量两条记录之间业务流程的时间
问题描述
我需要有关在 Oracle 中设计表和记录以处理业务流程、状态和状态之间的报告时间的建议。
我们有一个事务表,其中记录了序列号记录 ID、文档 ID、日期和时间以及状态。状态反映了文档在审批流程中的位置,反映了需要对文档执行的任务。最多有 40 种状态,显示需要批准的人和正在完成的任务。所以有一个文档标题或父记录,以及多个状态记录作为子记录。
挑战在于分析瓶颈在哪里,哪些任务耗时最长等。
从业务 pov 中,任务接收文档,我们知道发生这种情况的日期和时间。我们没有当前任务的发布或完成日期和时间。我们所拥有的只是下一个任务的开始日期和时间。请注意,文档一次只能具有一种状态。
由于我不会深入讨论的原因,我们不能使用 ETL 为状态创建结束日期和时间,尽管我认为这是解决方案。
部分挑战在于状态不完全连续或具有固定顺序。某些状态可以启动、停止,然后在该过程中再次启动。
我想报告的是每个状态记录所花费的时间,每周或每月,时间日期时间结束减去日期时间开始。任何人都可以提出一个功能或其他方式来实现这一点吗?
我不需要特定的代码。我可以在伪代码中使用一些示例,或者只是以概述形式来解决这个问题。然后我可以弄清楚代码。
解决方案
您可以在事务表上插入和更新后使用触发器在LOG_TABLE上记录每次更改:id 事务、最后状态、新状态、批准人、更改日期时间(可能使用 TiMESTAMP 数据类型是小数秒关心)、终端, 会话 ID, 用户名。
对于插入:您需要定义一种“插入状态”,与其他 40 种状态不同。例如,状态是数字类型,“插入状态”可以是“ -1 ”(减一),所以最后状态是“ -1 ”,新状态是事务表上插入记录的状态。
使用此LOG_TABLE,您可以开发一个包,其中包含计算更改状态之间的时间、显示所有更改、显示最后更改等功能。
推荐阅读
- gremlin - Gremlin:如何使用 math() 过滤遍历结果?
- spring - MAP 和 Web 服务之间的区别
- r - 如何使用 dplyr 查找列在一行中的排名?
- android-studio - Gradle 同步失败。修复了编码,但构建失败
- jmeter - 在 jmeter post 方法中抛出状态 500 内部错误,同样需要完整的数据
- c# - EF Core 在添加带有种子数据的迁移时返回 Stackoverflow
- php - PHP关联数组使用变量作为键
- linux - MongoDb 不启动 Amazon Linux
- javascript - 超集群返回意外的经度值
- ios - Swift - 遍历不同的对象类型