В моей процедуре я написал следующий запрос, который не вставляет записи в таблицу TEST
. Таблица KPI definition
имеет следующую запись:Сравнение временной метки в процедуре не работает
KPI_DEF_ID KPI_FREQUENCY KPI_FREQ_TIME_UNIT EVENT_ID
1000136 30 MINUTE 10028
1000137 50 MINUTE 10028
У меня есть приложение, в котором пользователь хочет получить записи в зависимости от временной метки. Таким образом, пользователь может войти в приложение, чтобы получить записи, например, старше 30 минут и не более 24 часов. И временная метка может меняться. Более старая отметка времени взята из таблицы KPI DEFINITION
и хранится в столбце KPI_FREQUENCY
и KPI_FREQUENCY_UNIT
, и это может быть changabler. И более новая, чем временная метка, фиксирована, и я сохранил ее в varaible LAST_OLDER_VAL
и LAST_OLDER_VAL_UNIT
. Я использовал вставку, используя запрос select, чтобы хранить записи в таблице, но не работает.
create or replace PROCEDURE "EXT_TEST" AS
LAST_WF_ID Number := 0;
--LAST_UNIT NUMBER:=10;
--LAST_UNIT_VAL VARCHAR2(20);
LAST_OLDER_VAL NUMBER := 24;
LAST_OLDER_VAL_UNIT VARCHAR2(10) := 'HOUR';
CURSOR WF_WORKFLOW_CUR IS
Select KPI_DEF_ID,KPI_FREQUENCY,KPI_FREQ_TIME_UNIT,EVENT_ID,BUSINESS_CHECK_PERIOD_ID 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);
-- removed, retrieve a new START_ID from source first, don't use the last id.
--SELECT LAST_TASK_ID INTO LAST_WF_ID FROM CAPTURING where DB_TABLE='TEMP_WF_WORKFLOW';
FOR WF_WORKFLOW_ROW IN WF_WORKFLOW_CUR
LOOP
--select MIN(ID) INTO LAST_WF_ID from [email protected]_RETAIL WF where WF.START_DATE > sysdate - numtodsinterval (WF_WORKFLOW_ROW.KPI_FREQUENCY, WF_WORKFLOW_ROW.KPI_FREQ_TIME_UNIT);
Insert into TEST(ID,NAME,SUBSCRIPTION_ID,START_DATE,STATUS_ID,ACCOUNT_ID,END_DATE)
Select DISTINCT(WF.ID),WF.NAME,WF.SUBSCRIPTION_ID,WF.START_DATE,WF.STATUS_ID,WF.ACCOUNT_ID,WF.END_DATE
from [email protected]_RETAIL WF where WF.STATUS_ID = 0 and WF.NAME = 'SIGNUP_MOBILE_PRE_PAID'
and WF.START_DATE > SYSDATE - numtodsinterval (LAST_OLDER_VAL, LAST_OLDER_VAL_UNIT
and WF.START_DATE < SYSDATE - numtodsinterval (WF_WORKFLOW_ROW.KPI_FREQUENCY, WF_WORKFLOW_ROW.KPI_FREQ_TIME_UNIT));
DBMS_OUTPUT.PUT_LINE('WF_WORKFLOW_ROW.KPI_FREQUENCY - ' || WF_WORKFLOW_ROW.KPI_FREQUENCY);
DBMS_OUTPUT.PUT_LINE('WF_WORKFLOW_ROW.KPI_FREQ_TIME_UNIT - ' || WF_WORKFLOW_ROW.KPI_FREQ_TIME_UNIT);
END LOOP;
END EXT_TEST;
Что означают, что вы не работаете? Вы получаете какую-либо ошибку? Или неправильный результат? – Noel
Я не получаю никаких ошибок, и записи не вставляются в таблицу TEST. Проблема заключается в моем выборе условия запроса, где я сравниваю, и почему он не работает. – Andrew
Учитывайте использование типа данных 'INTERVAL DAY TO SECOND' вместо' FREQUENCY' и 'FREQ_TIME_UNIT'. –