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中创建一个函数(或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;
答案 0 :(得分:0)
我认为你不需要递归。我假设prev_trans_time是最后使用的订单时间。您希望等到新的时间来创建下一个事务。您的函数可以迭代,直到系统时间结束。
declare
transact_time date := sysdate;
begin
while (prev_trans_time > transact_time) loop
transact_time := sysdate;
end loop;
return transact_time;
end;