आप regexp_substr
का उपयोग कर सकते हैं शेड्यूल टपल से अलग-अलग तत्वों को निकालने के लिए कार्य करता है। उदाहरण के लिए regexp_substr(schedule, '[0-9*]+', 1,1)
मिनट तत्व निकालेगा, जबकि regexp_substr(sched, '[0-9*]+', 1, 2)
घंटा तत्व निकालेगा। चौथा पैरामीटर वांछित तत्व का चयन करता है। फिर आप या तो EXTRACT
. का उपयोग कर सकते हैं या TO_CHAR
तुलना के लिए अपने टाइमस्टैम्प के विभिन्न हिस्सों को प्राप्त करने के लिए कार्य करें।
with cron(ID, Sched) as (
select 102, '00 9 * * * *' from dual
), exec(id, ts) as (
select 102, to_timestamp('2017-11-05 9:00:00', 'yyyy-mm-dd hh24:mi:ss') from dual union all
select 102, to_timestamp('2017-11-05 9:05:00', 'yyyy-mm-dd hh24:mi:ss') from dual
), c2 as (
select id
, sched
, regexp_substr(sched,'[0-9*]+',1,1) min
, regexp_substr(sched,'[0-9*]+',1,2) hour
, regexp_substr(sched,'[0-9*]+',1,3) day
, regexp_substr(sched,'[0-9*]+',1,4) mon
, regexp_substr(sched,'[0-9*]+',1,5) wday
, regexp_substr(sched,'[0-9*]+',1,6) year
from cron
)
select c2.*
, exec.ts
, case when (year = '*' or to_number(to_char(ts,'yyyy')) = to_number(year))
and (mon = '*' or to_number(to_char(ts,'mm') ) = to_number(mon ))
and (day = '*' or to_number(to_char(ts,'dd') ) = to_number(day ))
and (hour = '*' or to_number(to_char(ts,'hh24')) = to_number(hour))
and (min = '*' or to_number(to_char(ts,'mi') ) = to_number(min ))
and (wday = '*' or to_number(to_char(ts,'d') ) = to_number(wday))
then 'OK'
else 'KO'
end Match
from exec
join c2
on c2.id = exec.id;
आवश्यक परिणाम प्राप्त करने के लिए तार्किक अभिव्यक्ति को केस स्टेटमेंट से आंशिक या संपूर्ण रूप से स्थानांतरित करें।