在Oracle SQL中编写递归函数

时间:2017-07-25 23:10:49

标签: sql oracle recursion recursive-query

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;

1 个答案:

答案 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;