使用游标的单个for循环内的多个循环

时间:2015-03-31 14:01:50

标签: sql oracle for-loop stored-procedures cursor

我的程序中有2个游标,我想使用单个for循环因为使用这个我想在单个选择查询中循环2变量。这两个变量有两个不同的值,用于单选查询。这两个值来自KPI_DEFINITION表,它给出了我想要在我的选择查询中进行数据提取的时间戳。第一列KPI_FREQUENCY的值为30,KPI_FREQ_TIME_UNIT列的值为MINUTE。因此,如果我们合并这两个列,我们将获得30 MINUTE,并且还有另一个组合列值50 MINUTE,可能会有更多。这就是为什么我想把这个内部循环并在我的选择查询中与start_date字段值进行比较。但是不知道该怎么做。我只是使用2个游标来获取这个2列,并尝试将其循环到单个for循环中,但不知道该怎么做。如果我不想使用两个游标但没有找到方法,可能还有另一个解决方案。

create or replace PROCEDURE "EXT_TEST" AS 

LAST_WF_ID Number := 0;
LAST_UNIT NUMBER:=10;
LAST_UNIT_VAL VARCHAR2(20);

CURSOR KPI_FREQUENCY_CUR IS
Select KPI_FREQUENCY INTO LAST_UNIT from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION WHERE 
EVENT_ID = 10028;

CURSOR KPI_FREQ_TIME_UNIT_CUR IS
Select KPI_FREQ_TIME_UNIT INTO LAST_UNIT_VAL from RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION WHERE 
EVENT_ID = 10028;

BEGIN

DBMS_OUTPUT.PUT_LINE('LAST_UNIT - ' || LAST_UNIT);
DBMS_OUTPUT.PUT_LINE('LAST_UNIT_VAL - ' || LAST_UNIT_VAL);

select MIN(ID) INTO LAST_WF_ID from WF_WORKFLOW@FONIC_RETAIL where start_date > sysdate - numtodsinterval(LAST_UNIT,LAST_UNIT_VAL);

DBMS_OUTPUT.PUT_LINE('LAST_WF_ID - ' || LAST_WF_ID);

END EXT_TEST;

Sample data from KPI_DEFINITION table:

KPI_DEF_ID  KPI_FREQUENCY KPI_FREQ_TIME_UNIT  EVENT_ID
1000136     30            MINUTE                10028   
1000137     50            MINUTE                10028

1 个答案:

答案 0 :(得分:1)

等待看到你的实际数据...我建议尝试更简单的事情......比如:

  select r.kpi_frequency, r.kpi_freq_time_unit, min(f.id) 
    from rator_monitoring_configuration.kpi_definition   r,
         wf_workflow@fonic_retail    f
   where r.event_id = 10028
     and f.start_date > sysdate - numtodsinterval ( r.kpi_frequency, r.kpi_freq_time_unit );
   group by r.kpi_frequency, r.kpi_freq_time_unit
   order by r.kpi_frequency, r.kpi_freq_time_unit;