【发布时间】:2015-03-31 14:01:49
【问题描述】:
我的过程中有 2 个游标,我想使用单个 for 循环,因为使用它我想在单个选择查询中循环 2 个变量。这两个变量有 2 个不同的值,用于单选查询。这两个值来自KPI_DEFINITION 表,它为我提供了我想在我的选择查询中比较数据提取的时间戳。第一列 KPI_FREQUENCY 的值为例如 30,KPI_FREQ_TIME_UNIT 列的值为 MINUTE。因此,如果我们将这 2 列组合起来,我们将得到 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
【问题讨论】:
-
为什么不加入这些表格?听起来您有一对一的关系..单个 KPI_FREQUENCY 与单个 KPI_FREQ_TIME_UNIT 匹配?您可以发布一些您拥有的示例数据吗?以及你期望看到的输出?
-
嗯,刚刚注意到,我提到的“1对1”关系是同一张表! O.o 这看起来你做的事情都错了..正在重写..请发布一些示例数据。
-
实际上这两列都在 KPI_DEFINITION 表中,所以我认为它不可能加入它吗?我已经在这 2 列中给出了样本值,即 30 分钟。 KPI_FREQUENCY 包含值 30 和 KPI_FREQ_TIME_UNIT 包含值 MINUTE。所以我想把它作为组合输入并在我的选择查询中使用,以便与 start_date 进行比较以执行数据提取。所以我会得到例如从 start_date 开始的 30 MINUTE 的数据。
-
不需要加入,因为它们是同一张表.. 也不需要 2 个游标;) 请发布一些示例数据。
-
我没有得到您需要的样本数据?你能告诉我你需要什么数据吗?
标签: sql oracle for-loop stored-procedures cursor