First day of the month between 08:00 and 18:30

DB version: 10.2.0.4

Due to the nature of our the first working day of each month (like today 1 MS), the DB will be very busy.
We execute a proc purge planned Windows Scheduler every 5 minutes every day.

But the first day of every month (like today 1 MS), if it's a day of the week (Monday to Friday) we do not want this proc running between 08:00 and for dinner from 18:30.

So, I thought including the logic in the procedure itself.

How can I implement this?

Edited by: user872043, Sep 1 2010 08:48

Here is an example of using DBMS_SCHEDULER which should meet your needs:

Create schedules

BEGIN
        DBMS_SCHEDULER.CREATE_SCHEDULE
        ( schedule_name   => 'every_5_schedule'
        , repeat_interval => 'FREQ=MINUTELY; BYMONTHDAY=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31; INTERVAL=5; BYSECOND=0'
        , comments        => 'Schedule to run every 5 minutes'
        );

        DBMS_SCHEDULER.CREATE_SCHEDULE
        ( schedule_name   => 'busy_hourly_schedule'
        , repeat_interval => 'FREQ=MINUTELY; BYMONTHDAY=1; BYHOUR=0,1,2,3,4,5,6,7,19,20,21,22,23; INTERVAL=5;'
        , comments        => 'Schedule to run every 5 minutes except certain hours on the first of the month'
        );

        DBMS_SCHEDULER.CREATE_SCHEDULE
        ( schedule_name   => 'busy_6pm_schedule'
        , repeat_interval => 'FREQ=MINUTELY; BYMONTHDAY=1; BYHOUR=18; BYMINUTE=30,35,40,45,50,55'
        , comments        => 'Schedule to run every 5 minutes from 6:30 - 7'
        );
END;
/

There are three lists.

every_5_schedule - runs every 5 minutes for all the days that are not on the first day of the month
busy_hourly_schedule - runs every 5 minutes for the acceptable hours on the first day of the month
busy_6pm_schedule - retrieves the half hour from 6:30 - 7 on the first day of the month.

Then, create your business:

Job creation

BEGIN
        DBMS_SCHEDULER.CREATE_JOB
        ( job_name        => 'YOUR JOB'
        , job_type        => 'PLSQL_BLOCK'
        , job_action      =>'BEGIN YOURPROC; END;'
        , repeat_interval => 'EVERY_5_SCHEDULE, BUSY_HOURLY_SCHEDULE, BUSY_6PM_SCHEDULE'
        , enabled         => TRUE
        , comments        => 'Some comments'
        );
END;
/
 

HTH!

Tags: Database

Similar Questions

  • How to find the first day of the month following two years one year from now?

    Hello

    I need to find the first day of the month following two years ago, based on the current date.

    For example: If today is the 31/08/2015 so I need to find the date range between 31/08/2015 and on 09/01/2013. How can I write an SQL which allows to automate this calculation instead of hard-coding the values. Please do help me out with this so that I can build the SQL that can produce the desired result.

    Thank you

    Dhilip

    find the start of the month - 2 years in advance, early - 2 years + 1 months in advance and go back 1

    Select trunc (add_months(sysdate,24), 'MM'), trunc (add_months(sysdate,25), 'MM') - 1 double;

  • How to calculate the first day of the month following in BI Publisher

    I need to be able to calculate the first day of the month of a date field in a BI Publisher model. The field name is COL_CLM_180 and contains a date in the format "YYYY-MM-DD". I have found so far any documentation that still gives me an idea of what to do.

    Any help or advice would be appreciated

    Hi - thank you very much for your help. Your last answer got me going in the right direction and I indeed was dense. I don't know why I don't think to the calculation in the original query. I put the statement: TRUNC (ADD_MONTHS(A.COL_CLM_180,1), 'MM') in a column in the query of conduct and it has worked flawlessly. Thank you - thank you - thank you.

  • query for the first day of the month

    Hi all

    How to get the first day of the month in the sql query.

    SQL> select trunc(sysdate,'mm') first_day from dual;
    
    FIRST_DAY
    ---------
    01-AUG-15
    
    SQL> select trunc(sysdate,'month') first_day  from dual;
    
    FIRST_DAY
    ---------
    01-AUG-15
    
    SQL> select trunc(sysdate,'mon')  first_day from dual;
    
    FIRST_DAY
    ---------
    01-AUG-15
    
    SQL>
    
  • first day of the month and time

    Hello

    Using oracle 11.2.0.3

    A table with a column date

    sample opening time data 04/08/2014-08:30 one single column, another column start date 04/02/2014

    Want to have a sql that will go through an opening time table set on the first day of the month as well as existing time

    for example expect times to be

    04/01/2014 08:30

    Code below will give the first day of the month

    What is the best way to achieve this-date data type columns.

    {code}

    Select trunc(start_time,'MM))

    of customer_hours ch

    {code}

    Select

    SYSDATE - trunc (sysdate) + trunc (sysdate, 'MM')

    of the double

    resp.

    Select

    start_time - trunc (start_time) + trunc (start_time, 'MM')

    of the double

  • First day of the month

    How to find the first day of the month if the month format is like TO_CHAR(SYSDATE,'YYYYMM')
    
    Sanjay
    Published by: user12957777 on May 23, 2012 21:12

    There is no 'day' in this date format.

    What you trying to do? What do you expect the result to look like?

    Are you wanting to set a date for the first day of the month and year of your example?

    SELECT TO_DATE(TO_CHAR(SYSDATE,'YYYYMM') || '01', 'YYYYMMDD') FROM DUAL;
    
  • each first day of the month

    Hi friends here is the querry I wrote to display every first day of the month, but there is something wrong in it... Help me...
    create or replace procedure minmax is
    cursor minmax_cur is
    Select min (hiredate), max in emp (hiredate);
    number of v_minmonths;
    number of v_maxmonths;
    number of v_minyears;
    number of v_maxyears;
    x date of publication;
    date of y;

    Start
    Open minmax_cur;
    extraction minmax_cur
    x, y;
    v_minmonths: = extraction (x months);
    v_minyears: = extraction (year x);
    While (x, y) loop
    because me in 1... v_minmonths loop
    If (v_minmonths < 12) then
    v_minmonths: = v_minmonths + 1;
    x: = x + 28.
    dbms_output.put_line(v_minmonths ||) '/' || '01'. '/' ||
    v_minyears);
    on the other
    v_minmonths: = 0;
    v_minyears: = v_minyears + 1;
    x: = x + 28.

    end if;
    end loop;
    end loop;
    minMax end;
    and the results are

    01/01/1981
    01/02/1981
    01/03/1981
    ..................
    .........---
    01/04/1987
    01/05/1987
    01/06/1987
    01/07/1987
    01/08/1987
    01/09/1987
    01/10/1987
    01/11/1987 the problem is max (hiredate) is 5/23/1987...it must show up to 01/05/1987...
    I get a few more months...
  • find the first day of the month

    Hello...
    can u pls let me know how to find the first day of the month, if the number of months (for ex - OCT-10) is passed as input

    Kind regards

    I'm not sure that there is a function called FIRST_DAY().

    SQL> SELECT first_day (SYSDATE)
      2    FROM DUAL;
    SELECT first_day (SYSDATE)
           *
    ERROR at line 1:
    ORA-00904: "FIRST_DAY": invalid identifier
    
    SQL> SELECT TRUNC (SYSDATE, 'month')
      2    FROM DUAL;
    
    TRUNC(SYS
    ---------
    01-DEC-08
    
    SQL> 
    

    I hope this helps.

    Kind regards
    Joice

  • Function to retrieve the first day of the month.

    Select (sysdate, 'IW') of double

    I know it takes the date of Monday. Is there a function like above that has the date of return to the first Monday of the month?

    Thanks in advance.

    Hello

    NEXT_DAY is very convenient, but it is dependent on the NLS_DATE_LANGUAGE, and you cannot pass an argument to override that.
    TRUNC (dt, 'IW') is not in the NLS settings, then you may prefer this:

    TRUNC ( 6 + TRUNC (SYSDATE, 'MONTH')
          , 'IW'
          )          AS first_monday
    

    1st Monday of the month is fixed to the Monday or before the 7th of the month.

  • Monday the 1st business day of the month of 15 before and after 15.

    I want to choose the 1st Monday with the business day (Y) of a month (january), owned by the 15th of the month and after the 15th of the month.
    Whereas it should be 2 folders, 1 record should be before the 15th of the month with the word 'Monday' & Holiday (N) and 2nd record should be based on the 15th of the month
    with the word 'Monday' & Holiday (N).

    Table:-holiday
    Column
    ---------
    Time_Date - holiday - Time_Day
    2011-01-01 00:00:00 - N - Tuesday

    Please let me know the oracle query.

    Thanks and greetings
    R Rodriguez

    Edited by: 880353 August 19, 2011 05:14

    It's almost like this... just a matter of playing with the SQL to reorganize the command:

    Select
    min (case when TIME_DATE between trunc(sysdate,'MM') and trunc (sysdate, 'MM') + 13 and)
    H.HOLIDAY = ' only then end TIME_DATE to another null) «FIRST»,
    min (case when TIME_DATE between trunc (sysdate, 'MM') + 14 and last_day (sysdate) and)
    H.HOLIDAY = ' only then end TIME_DATE to another null) "FIRST > = 15.
    Holiday h.
    (select next_day (trunc(sysdate, 'MONTH')-1, 'Monday') + 7 *(level-1) double DD
    connect by level<= 5)="">
    where M.DD = h.TIME_DATE

  • What day of the month are updates released and how often?

    I saw a calendar, but I struggle to understand. I am putting together a Calendar Update for distribution - to my company and the need to update dates scheduled for Firefox ESR 31.x. thank you Jeff

    Hi jeff, regular updates will be released every 6 weeks. you could use or subscribe to this public google calendar:
    https://www.Google.com/calendar/embed?src=Mozilla.com_2d37383433353432352d3939%40resource.Calendar.Google.com

  • Every first of the month between Date1 and Date2

    I created this query... Basically, it selects the dates more low rate and high and every day during this period, he made a subquery by selecting incoming and outgoing so far.

    I need to make a selection by month, not per day. How can I change the temporary table of DAYS so that each first day of the MONTH is selected instead of DAILY


    I have this
    ---------------------
    with
    DATES in the form
    (select (select min (REC_DATE) of the STOCK) as FROM_DT, (select max (CHANGE_DATE) of STOCK_ADJUST) as DOUBLE TO_DT),
    DAYS like
    (select Connect FROM_DT + ((ROWNUM-1)) as DATES by ROWNUM DT < = ((TO_DT-FROM_DT)) + 1)

    Select
    DAYS. GTO
    (select sum (stm.qty_rec) of stock stm WHERE pnm_auto_key = 1 and STM. REC_DATE < DAYS. Pnm_auto_key GROUP BY DT) ENTERING,
    (select sum (saj.qty_adj) in stock_adjust saj
    join in-house stock stm on saj.stm_auto_key = stm.stm_auto_key
    inner join parts_master MFN on stm.pnm_auto_key = pnm.pnm_auto_key where pnm_auto_key = 1 and SAJ. CHANGE_DATE < DAYS. Group by pnm_auto_key DT) OUTGOING
    of DAYS;
    ---------------------

    I need it
    ---------------------
    with
    DATES in the form
    (select (select min (REC_DATE) of the STOCK) as FROM_DT, (select max (CHANGE_DATE) of STOCK_ADJUST) as DOUBLE TO_DT),
    MONTHS as
    xxx?

    Select
    MONTHS. GTO
    (select sum (stm.qty_rec) of stock stm WHERE pnm_auto_key = 1 and STM. REC_DATE < MONTH. Pnm_auto_key GROUP BY DT) ENTERING,
    (select sum (saj.qty_adj) in stock_adjust saj
    join in-house stock stm on saj.stm_auto_key = stm.stm_auto_key
    inner join parts_master MFN on stm.pnm_auto_key = pnm.pnm_auto_key where pnm_auto_key = 1 and SAJ. CHANGE_DATE < MONTH. Group by pnm_auto_key DT) OUTGOING
    of MONTHS;
    ---------------------

    I won't have to try to understand which shows your code not formatted, but maybe this will give you assistance...

    SQL> ed
    Wrote file afiedt.buf
    
      1  with t as (select to_date('05/01/2008','DD/MM/YYYY') as start_dt,
      2                    to_date('05/11/2008','DD/MM/YYYY') as end_dt from dual)
      3  --
      4  select add_months(trunc(start_dt,'MM'),rownum-1) as dt
      5  from t
      6* connect by rownum <= months_between(end_dt, start_dt)+1
    SQL> /
    
    DT
    ---------
    01-JAN-08
    01-FEB-08
    01-MAR-08
    01-APR-08
    01-MAY-08
    01-JUN-08
    01-JUL-08
    01-AUG-08
    01-SEP-08
    01-OCT-08
    01-NOV-08
    
    11 rows selected.
    
    SQL>
    

    Published by: BluShadow on November 13, 2008 12:52

  • Get the last day of the month

    Hello

    How can I get the (day number of the) last day of a given month and year?

    So, if

    year 2015 = and month = 1, the output should be 31

    year = 2012 and month = 2 while production is expected to be 29

    year 2013 = and month = 2 while production is expected to be 28

    etc.

    Y at - it no OBIEE to achieve? If not, then a command SQL Oracle is very good too (I prefer OBIEE however)

    Thanks in advance,

    Erik

    You start from the first day of the month, you add 1 month [TIMESTAMPADD (SQL_TSI_MONTH, 1, 'your date')], you must subtract 1 day [TIMESTAMPADD (SQL_TSI_DAY,-1, 'your date')] and use the DAYOFMONTH function to get the number of the last day of the month [DAYOFMONTH ('your ' date')].

    All these calls nesting together and you're there.

  • Last day of the month with the last minute of the day

    Hello
    I wonder about how to get the last day of the month with the last minute of this day(23:59). We can use the last_day function (DATE) to get the last date, but reminds me of the time of day when the function has been executed. But I want to have the last minute with my last date of the current month.

    Please inform.

    Thank you

    HP

    Hello

    Ora_bie wrote:
    Hello
    I wonder about how to get the last day of the month with the last minute of this day(23:59). We can use the last_day function (DATE) to get the last date, but reminds me of the time of day when the function has been executed. But I want to have the last minute with my last date of the current month.

    In fact, it returns at the same time as the argument you pass; But whatever it is, is not what you want.

    This will return the last day of the month that contains the DATE 23:59 (or 23:59) dt:

    SELECT  ADD_MONTHS ( TRUNC (dt, 'MONTH')
                 , 1
                 ) - (1 / (24 * 60))
    FROM    dual
    ;
    

    TRUNC (dt, 'MONTH') is 00:00 on the first day of the month that contains dt.
    ADD_MONTHS (TRUNC (dt, 'MONTH'), 1) is from 00:00 the first day of the month following the one containing dt.
    ADD_MONTHS (TRUNC (dt, 'MONTH'), 1)-(1 / (24 * 60)) is a minute earlier.
    (Since there are 24 hours, each with 60 minutes, every day, 1 / (24 * 60) days is identical to a minute.)

    Another (less clear, in my opinion) way to get the same results is:

    TRUNC (LAST_DAY (dt)) + (1439/1440)  -- 1440 minutes = 1 day
    
  • Breaking a year in coming weeks of beginning and end Dates (parameters) and first and last day of the month

    Hello people:

    I have currently a query that picks up all the weeks between a date range where my week starts on Thursday and ends on Wednesday. The following query works fine except that I need the week of beginning and end, from beginning and end Dates of months and the beginning and the Dates of end of the values of the settings, I'm passing. In this case, I chose January 1, 2013 to 31 December 2013.

    Any help or pointers would be great!

    Thank you!

    Problem: I am picking up days of December 2012 as the first week began on December 27, 2012. In addition, in December, I'm pretty much lost last week as well (26 December - 31 December).

    The request in hand:

    SELECT first_thursday + (7 * (LEVEL - 1))   AS week_start_date,
                     first_thursday + (7 * LEVEL) - 1    AS  week_end_date
    FROM
    (
      SELECT TRUNC(p_from_date + 4, 'IW') - 4   AS first_thursday, -- Week should start the pre ceeding THURSDAY based on the Start Date
                      TRUNC( p_to_date + 4,  'IW') - 5     AS last_wednesday
      FROM
      (
        SELECT to_date('01-JAN-2013') AS p_from_date,
                        NVL(to_date('31-DEC-2013'), SYSDATE) AS p_to_date
        FROM     dual
      ) parms
    ) end_points
    CONNECT BY LEVEL <= ( last_wednesday + 1 - first_thursday)/7;
    

    Currently, this is the result I get (I'm only including the months of January and December here).

    Week_Start_Date     Week_End_Date
    27-DEC-12                02-JAN-13
    03-JAN-13                 09-JAN-13
    10-JAN-13                 16-JAN-13
    17-JAN-13                 23-JAN-13
    24-JAN-13                 30-JAN-13
    31-JAN-13                 06-FEB-13
    

    December:

    28-NOV-13               04-DEC-13
    05-DEC-13              11-DEC-13
    12-DEC-13              18-DEC-13
    19-DEC-13              25-DEC-13
    

    What I would really like is based on start and end Dates, as well as the first and the last day of the month is similarly try nicely. I have provided and then gently break at the end of the month:

    January:

    01-JAN-13              02-JAN-13
    03-JAN-13              09-JAN-13
    10-JAN-13             16-JAN-13
    17-JAN-13             23-JAN-13
    24-JAN-13             30-JAN-13
    31-JAN-13             31-JAN-13
    

    February:

    01-FEB-13    06-FEB-13
    07-FEB-13    13-FEB-13
    14-FEB-13    20-FEB-13
    21-FEB-13    27-FEB-13
    28-FEB-13    28-FEB-13
    

    November:

    31-OCT-13    06-NOV-13
    07-NOV-13    13-NOV-13
    14-NOV-13    20-NOV-13
    21-NOV-13    27-NOV-13
    28-NOV-13    04-DEC-13
    

    December:

    01-DEC-13           04-DEC-13
    05-DEC-13           11-DEC-13
    12-DEC-13          18-DEC-13
    19-DEC-13          25-DEC-13
    26-DEC-13          31-DEC-13
    

    Hello

    Roxyrollers wrote:

    Hello people:

    I have currently a query that picks up all the weeks between a date range where my week starts on Thursday and ends on Wednesday. The following query works fine except that I need the week of beginning and end, from beginning and end Dates of months and the beginning and the Dates of end of the values of the settings, I'm passing. In this case, I chose January 1, 2013 to 31 December 2013.

    Any help or pointers would be great!

    Thank you!

    Problem: I am picking up days of December 2012 as the first week began on December 27, 2012. In addition, in December, I'm pretty much lost last week as well (26 December - 31 December).

    The request in hand:

    1. First_thursday SELECT + (7 * (LEVEL - 1)) AS week_start_date,
    2. first_thursday + (7 * LEVEL)-1 AS week_end_date
    3. Of
    4. (
    5. SELECT TRUNC (p_from_date + 4, 'IW') - 4 AS first_thursday,-week should start to perform the pre-mounted THURSDAY based on the Start Date
    6. TRUNC (p_to_date + 4, 'IW') - 5 AS last_wednesday
    7. Of
    8. (
    9. SELECT to_date('01-JAN-2013') AS p_from_date,
    10. NVL (to_date('31-Dec-2013'), SYSDATE) AS p_to_date
    11. OF the double
    12. ) parms
    13. ) end_points
    14. CONNECT BY LEVEL<= (="" last_wednesday="" +="" 1="" -="">

    Currently, this is the result I get (I'm only including the months of January and December here).

    1. Week_Start_Date Week_End_Date
    2. DECEMBER 27, 12 2 JANUARY 13
    3. JANUARY 3, 13 JANUARY 9, 13
    4. 10 JANUARY 13 JANUARY 16, 13
    5. 17 JANUARY 13 23 JANUARY 13
    6. 24 JANUARY 13 30 JANUARY 13
    7. 31 JANUARY 13 FEBRUARY 6, 13

    December:

    1. NOVEMBER 28, 13 4 DECEMBER 13
    2. 5 DECEMBER 13 DECEMBER 11, 13
    3. 12 DECEMBER 13 18 DECEMBER 13
    4. 19 DECEMBER 13 DECEMBER 25, 13

    What I would really like is based on start and end Dates, as well as the first and the last day of the month is similarly try nicely. I have provided and then gently break at the end of the month:

    January:

    1. JANUARY 1, 13 2 JANUARY 13
    2. JANUARY 3, 13 JANUARY 9, 13
    3. 10 JANUARY 13 JANUARY 16, 13
    4. 17 JANUARY 13 23 JANUARY 13
    5. 24 JANUARY 13 30 JANUARY 13
    6. 31 JANUARY 13 JANUARY 31, 13

    February:

    1. 1ST FEBRUARY 13 FEBRUARY 6, 13
    2. 7 FEBRUARY 13 FEBRUARY 13, 13
    3. 14 FEBRUARY 13 FEBRUARY 20, 13
    4. 21 FEBRUARY 13 FEBRUARY 27, 13
    5. 28 FEBRUARY 13 FEBRUARY 28, 13

    November:

    1. 31 OCTOBER 13 NOVEMBER 6, 13
    2. 7 NOVEMBER 13 NOVEMBER 13, 13
    3. 14 NOVEMBER 13 NOVEMBER 20, 13
    4. 21 NOVEMBER 13 NOVEMBER 27, 13
    5. NOVEMBER 28, 13 4 DECEMBER 13

    December:

    1. 1ST DECEMBER 13 DECEMBER 4, 13
    2. 5 DECEMBER 13 DECEMBER 11, 13
    3. 12 DECEMBER 13 18 DECEMBER 13
    4. 19 DECEMBER 13 DECEMBER 25, 13
    5. 26 DECEMBER 13 DECEMBER 31, 13

    Why the "weeks" in November, have all 7 days, while the "weeks" in the first or the last week in the other month usually have less?  (For example, February 28 is a 'week' alone.)

    The following works for the other months:

    WITH all_days AS

    (

    SELECT DATE "2013-01-01' + LEVEL - AS a_date 1

    OF the double

    CONNECT BY LEVEL<=>

    )

    SELECT DISTINCT

    More GRAND (TRUNC (a_date + 4, 'IW') - 4)

    , TRUNC (a_date, 'MONTH')

    ) AS week_begin

    , The LEAST (TRUNC (a_date + 4, 'IW') + 2

    TRUNC (LAST_DAY (a_date))

    ), Week_end

    Of all_days

    ORDER BY week_begin

    ;

    Output:

    WEEK_BEGIN WEEK_END

    ----------- -----------

    January 1, 2013 January 2, 2013

    January 3, 2013 January 9, 2013

    January 10, 2013 January 16, 2013

    January 17, 2013 January 23, 2013

    January 24, 2013 January 30, 2013

    January 31, 2013 January 31, 2013

    February 1, 2013 February 6, 2013

    February 7, 2013 February 13, 2013

    February 14, 2013 February 20, 2013

    February 21, 2013 February 27, 2013

    February 28, 2013 February 28, 2013

    ...

    November 1, 2013 November 6, 2013

    November 7, 2013 November 13, 2013

    November 14, 2013 November 20, 2013

    November 21, 2013 November 27, 2013

    November 28, 2013 November 30, 2013

    December 1, 2013 December 4, 2013

    December 5, 2013 December 11, 2013

    December 12, 2013 December 18, 2013

    December 19, 2013 December 25, 2013

    26 December 2013 31 December 2013

Maybe you are looking for