ORDER_ID TRANSACT_TIME
AAA 24-JUL-17 04.05.54.491000000 PM
AAA 24-JUL-17 04.05.54.496000000 PM
AAA 24-JUL-17 04.05.54.504000000 PM
BBB 24-JUL-17 04.05.54.491000000 PM
BBB 24-JUL-17 04.05.54.497000000 PM
BBB 24-JUL-17 04.05.54.505000000 PM
... ...
此数据(订单ID和Transaction_Time)每小时左右发布到表中。在Oracle中编写递归函数SQL
我想在Oracle SQL中创建一个函数(或SQL查询)以确保每个后续事务时间大于或等于先前的条目。
基本上AAA中的第二个条目不能比AAA中的第一个条目具有更早的事务时间,依此类推。
我想就如何去写这个函数做一些指导。一个想法,我发现是写一个递归函数,我想是这样的,但我不完全知道是怎么回事:
Note: PREV_TRANS_TIME is an alias I generated to grab the transaction
time of the previous transaction (meaning for first entry PREV_TRANS_TIME = null)
CREATE OR REPLACE FUNCTION TransactTimeChecker(PREV_TRANS_TIME) RETURN STRING AS
BEGIN
IF prev_trans_time > transact_time THEN
RETURN (I'm not sure what to write
here but I need to fix the entries so the order is adjusted)
ELSIF prev_trans_time <= transact_time THEN
RETURN (we are good, no problem)
ELSE
--Do nothing
END IF;
END;
当您引用具有相同'order_id'的行时,可以使用“后续”,“前一个”,“第二个”,“第一个”等词。这意味着他们以某种方式被命令。与您在纸上或屏幕上看到的不同,数据库中的行不是**排序的。你需要一个明确的排序标准,然后才能说出“后续”等。明显的排序是通过'transact_time'来完成的,但显然在你的问题中情况并非如此,因为你必须检查事务处理的时间实际上是否正确。其他**排序是否有,以确定“第一”,“第二”等?你没有提到任何。 – mathguy
表上的检查约束可能是此需求的最佳解决方案。你看过他们(例如https://www.techonthenet.com/oracle/check.php)。 –
我同意@Mathguy。这看起来像是一个架构问题。什么产生'order_id,transact_time'?大概是数据库之外的东西。为什么按照transact_time排序不能保证正确的排序? – APC