首页 > 解决方案 > 我应该如何构造一个 Oracle 函数或其他代码来测量两条记录之间业务流程的时间

问题描述

我需要有关在 Oracle 中设计表和记录以处理业务流程、状态和状态之间的报告时间的建议。

我们有一个事务表,其中记录了序列号记录 ID、文档 ID、日期和时间以及状态。状态反映了文档在审批流程中的位置,反映了需要对文档执行的任务。最多有 40 种状态,显示需要批准的人和正在完成的任务。所以有一个文档标题或父记录,以及多个状态记录作为子记录。

挑战在于分析瓶颈在哪里,哪些任务耗时最长等。

从业务 pov 中,任务接收文档,我们知道发生这种情况的日期和时间。我们没有当前任务的发布或完成日期和时间。我们所拥有的只是下一个任务的开始日期和时间。请注意,文档一次只能具有一种状态。

由于我不会深入讨论的原因,我们不能使用 ETL 为状态创建结束日期和时间,尽管我认为这是解决方案。

部分挑战在于状态不完全连续或具有固定顺序。某些状态可以启动、停止,然后在该过程中再次启动。

我想报告的是每个状态记录所花费的时间,每周或每月,时间日期时间结束减去日期时间开始。任何人都可以提出一个功能或其他方式来实现这一点吗?

我不需要特定的代码。我可以在伪代码中使用一些示例,或者只是以概述形式来解决这个问题。然后我可以弄清楚代码。

标签: oraclefunctiontimecalculation

解决方案


您可以在事务表上插入和更新后使用触发器在LOG_TABLE上记录每次更改:id 事务、最后状态、新状态、批准人、更改日期时间(可能使用 TiMESTAMP 数据类型是小数秒关心)、终端, 会话 ID, 用户名。

对于插入:您需要定义一种“插入状态”,与其他 40 种状态不同。例如,状态是数字类型,“插入状态”可以是“ -1 ”(减一),所以最后状态是“ -1 ”,新状态是事务表上插入记录的状态。

使用此LOG_TABLE,您可以开发一个包,其中包含计算更改状态之间的时间、显示所有更改、显示最后更改等功能。


推荐阅读