DBA Data[Home] [Help]

APPS.BIX_EMAILS_LOAD_PKG SQL Statements

The following lines contain the word 'select', 'insert', 'update' or 'delete':

Line: 95

  IF (FND_PROFILE.DEFINED('BIX_DM_DELETE_SIZE')) THEN
    g_commit_chunk_size := TO_NUMBER(FND_PROFILE.VALUE('BIX_DM_DELETE_SIZE'));
Line: 118

  BIS_COLLECTION_UTILITIES.deleteLogForObject('BIX_EMAIL_DETAILS_F');
Line: 163

  SELECT /*+ ordered full(intr) full(actv) full(mitm) use_hash(mitm,actv,intr,) +*/
    intr.interaction_id interaction_id,
    max(nvl(intr.resource_id, -1)) resource_id,
    max(nvl(intr.party_id, -1)) party_id,
    max(intr.start_date_time) start_date_time,
    max(nvl(mitm.source_id, -1)) source_id,
    max(nvl(irc.route_classification_id, -1)) route_classification_id,
    max(nvl(iview.depth, 0)) depth
  FROM
    jtf_ih_media_items mitm,
    jtf_ih_activities actv,
    jtf_ih_interactions intr,
    --
    --Changes for R12
    --
    (
    select /*+ full(im) +*/  name, max(route_classification_id) route_classification_id
    from iem_route_classifications im
    group by name
    ) irc,
    (
	select
	interaction_id,
	sum(depth) depth
	from
	(
	   /* This returns the parent level interactions and hardcoded depth as 1 for email replies-auto replies */
       SELECT
			  actv.interaction_id interaction_id,
              1 depth
       FROM jtf_ih_activities actv,
          /*  jtf_ih_media_items imtm,*/
		    jtf_ih_media_item_lc_segs mseg,
            jtf_ih_media_itm_lc_seg_tys mtys
       WHERE  actv.media_id = mseg.media_id
       AND   mtys.milcs_type_id = mseg.milcs_type_id
       AND   mtys.milcs_code IN ('EMAIL_AUTO_REPLY','EMAIL_REPLY')
	   GROUP BY actv.interaction_id
        UNION ALL
	 /* This will count the no of replies that the interaction tree has. If there is no
	 child interaction that has a reply ,we need to go to the parent interaction level
	 and check if that has a reply, if so increment by 1 or leave it as is*/
	 SELECT 	root_interaction_id ,
	 /*NVL(max(decode(milcs_code,'EMAIL_REPLY',DEPTH,'EMAIL_AUTO_REPLY',DEPTH,NULL)),0)+1 DEPTH*/
	 count(distinct media_id)
	FROM
	(
		SELECT  /*+ ordered */
		   root_interaction_id,
		        parent,
			child,
			depth,
			mseg.media_id
			/* Added */
			--,
			--first_value(milcs_code) over (partition  by mseg.media_id order by mseg.start_Date_time desc) milcs_code
		FROM
		jtf_ih_media_itm_lc_seg_tys mtys,
		jtf_ih_media_item_lc_segs mseg,
		jtf_ih_media_items mitm,
		jtf_ih_activities actv ,
		(
			SELECT   to_number(decode(instr(sys_connect_by_path(intr3.interact_interaction_idrelates, ':'), ':', 2), 0,
			                substr(sys_connect_by_path(intr3.interact_interaction_idrelates, ':'), 2),
					substr(sys_connect_by_path(intr3.interact_interaction_idrelates, ':'), 2,
					instr(sys_connect_by_path(intr3.interact_interaction_idrelates, ':'), ':', 2)-2)))  root_interaction_id,
					intr3.interact_interaction_idrelates  parent,
		                intr3.interact_interaction_id child,
				        level        depth
	                 FROM  jtf_ih_interaction_inters intr3
		         START WITH intr3.interact_interaction_idrelates in
				(select
			          intr2.interact_interaction_idrelates
		                  from jtf_ih_interaction_inters intr2
                                  where intr2.interact_interaction_idrelates not in
				  (
		                      select
				      intr1.interact_interaction_id
		                      from jtf_ih_interaction_inters intr1
				   )
				 )
	                 CONNECT BY intr3.interact_interaction_idrelates = PRIOR intr3.interact_interaction_id
		) intr
		WHERE actv.interaction_id =intr.child
		AND   mitm.media_id = actv.media_id
		AND   mitm.media_id = mseg.media_id
		AND   mseg.milcs_type_id = mtys.milcs_type_id
		AND mitm.direction='INBOUND' AND mitm.media_item_type='EMAIL'
	    /* Added */ AND mtys.milcs_code in ('EMAIL_REPLY','EMAIL_AUTO_REPLY')

	) GROUP BY ROOT_INTERACTION_ID
	) iview/* Added */
	WHERE NOT EXISTS (
	select 1 from jtf_ih_interaction_inters inter
	WHERE iview.interaction_id =  inter.interact_interaction_id
	)
	group by interaction_id
  ) iview
  WHERE  intr.start_date_time between g_collect_start_date and g_collect_end_date
  AND
  intr.interaction_id = actv.interaction_id
  AND   intr.interaction_id = iview.interaction_id(+)
  AND   mitm.media_id = actv.media_id
  AND   mitm.direction = 'INBOUND'
  AND   mitm.media_item_type = 'EMAIL'
  AND   mitm.classification = irc.name(+)
  AND   intr.interaction_id NOT IN (
           SELECT
             inter.interact_interaction_id
           FROM   jtf_ih_interaction_inters inter)
  GROUP BY intr.interaction_id;
Line: 366

      /* Update the half-hour rows of ICI summary table with the resolution measures */
      FORALL i IN l_root_interaction_id.FIRST .. l_root_interaction_id.LAST
	 MERGE INTO bix_email_details_f bed
	 USING (
	     SELECT
		   l_agent_id(i) agent_id
		  ,l_email_account_id(i) email_account_id
		  ,l_classification_id(i) email_classification_id
		  ,l_party_id(i) party_id
		  ,to_number(to_char(l_start_date_time(i), 'J')) time_id
		  ,1  period_type_id
		  ,trunc(l_start_date_time(i)) period_start_date
		  ,'00:00' period_start_time
                  ,l_one_done_rsln(i) one_rsln_in_period
		  ,l_two_done_rsln(i) two_rsln_in_period
		  ,l_three_done_rsln(i) three_rsln_in_period
		  ,l_four_done_rsln(i) four_rsln_in_period
		  ,l_intr_thread(i) interaction_threads_in_period
          FROM DUAL) change
      ON (
             bed.agent_id = change.agent_id
         AND bed.party_id = change.party_id
         AND bed.email_account_id = change.email_account_id
         AND bed.email_classification_id = change.email_classification_id
         AND bed.time_id = change.time_id
         AND bed.period_start_time = change.period_start_time
         AND bed.period_start_date = change.period_start_date
         AND bed.period_type_id = change.period_type_id
         AND bed.outcome_id = -1 AND bed.result_id = -1 AND bed.reason_id = -1
         )
	 WHEN MATCHED THEN
      UPDATE
      SET    bed.one_rsln_in_period = decode(change.one_rsln_in_period, 0, bed.one_rsln_in_period,
                                     decode(nvl(bed.one_rsln_in_period, 0) + change.one_rsln_in_period, 0, to_number(null),
                                        nvl(bed.one_rsln_in_period, 0) + change.one_rsln_in_period))
             ,bed.two_rsln_in_period = decode(change.two_rsln_in_period, 0, bed.two_rsln_in_period,
                                     decode(nvl(bed.two_rsln_in_period, 0) + change.two_rsln_in_period, 0, to_number(null),
                                        nvl(bed.two_rsln_in_period, 0) + change.two_rsln_in_period))
             ,bed.three_rsln_in_period = decode(change.three_rsln_in_period, 0, bed.three_rsln_in_period,
                                     decode(nvl(bed.three_rsln_in_period, 0) + change.three_rsln_in_period, 0, to_number(null),
                                        nvl(bed.three_rsln_in_period, 0) + change.three_rsln_in_period))
             ,bed.four_rsln_in_period = decode(change.four_rsln_in_period, 0, bed.four_rsln_in_period,
                                     decode(nvl(bed.four_rsln_in_period, 0) + change.four_rsln_in_period, 0, to_number(null),
                                        nvl(bed.four_rsln_in_period, 0) + change.four_rsln_in_period))
             ,bed.interaction_threads_in_period = decode(change.interaction_threads_in_period, 0,
		                        bed.interaction_threads_in_period, decode(nvl(bed.interaction_threads_in_period, 0)
						    + change.interaction_threads_in_period, 0, to_number(null),
                                  nvl(bed.interaction_threads_in_period, 0) + change.interaction_threads_in_period))
             ,bed.last_updated_by = g_user_id
             ,bed.last_update_date = g_sysdate
	 WHEN NOT MATCHED THEN INSERT (
	        bed.agent_id
		   ,bed.party_id
		   ,bed.email_account_id
		   ,bed.email_classification_id
		   ,bed.time_id
		   ,bed.period_start_time
		   ,bed.period_start_date
		   ,bed.period_type_id
                   ,outcome_id
                   ,result_id
                   ,reason_id
		   ,bed.created_by
		   ,bed.creation_date
		   ,bed.last_updated_by
		   ,bed.last_update_date
		   ,bed.one_rsln_in_period
		   ,bed.two_rsln_in_period
		   ,bed.three_rsln_in_period
		   ,bed.four_rsln_in_period
		   ,bed.interaction_threads_in_period )
	 VALUES (
	        change.agent_id
		   ,change.party_id
		   ,change.email_account_id
		   ,change.email_classification_id
		   ,change.time_id
		   ,change.period_start_time
		   ,change.period_start_date
		   ,change.period_type_id
                   ,-1
                   ,-1
                   ,-1
             ,g_user_id
             ,g_sysdate
             ,g_user_id
             ,g_sysdate
		   ,decode(change.one_rsln_in_period, 0, to_number(null), change.one_rsln_in_period)
		   ,decode(change.two_rsln_in_period, 0, to_number(null), change.two_rsln_in_period)
		   ,decode(change.three_rsln_in_period, 0, to_number(null), change.three_rsln_in_period)
		   ,decode(change.four_rsln_in_period, 0, to_number(null), change.four_rsln_in_period)
		   ,decode(change.interaction_threads_in_period, 0, to_number(null), change.interaction_threads_in_period));
Line: 461

      write_log('Total rows inserted/updated in bix_email_details_f for resolution : ' ||
                                                                      to_char(l_root_interaction_id.COUNT));
Line: 465

      /* Update the bix_interactions_temp table to keep track of depth by interaction */
--
--BIX_INTERACTION_TEMP is used for UPDATE program. This is used to keep track of
--whet we need to subtract - example yesterday an email might have been ONE AND DONE.
--Today the customer replies to it and it is no longer DONE.  So we need to go back and subtract
--yesterday's ONE AND DONE
--
      FORALL i IN l_root_interaction_id.FIRST .. l_root_interaction_id.LAST
        INSERT INTO BIX_INTERACTIONS_TEMP bit (
          interaction_id,
          created_by,
          creation_date,
          last_updated_by,
          last_update_date,
          depth,
          request_id,
          program_application_id,
          program_id,
          program_update_date )
        VALUES (
          l_root_interaction_id(i),
          g_user_id,
          g_sysdate,
          g_user_id,
          g_sysdate,
          l_curr_depth(i),
          g_request_id,
          g_program_appl_id,
          g_program_id,
          g_sysdate);
Line: 498

      write_log('Total rows inserted/updated in bix_interactions_temp : ' || to_char(l_root_interaction_id.COUNT));
Line: 523

  l_total_rows_deleted NUMBER := 0;
Line: 524

  l_rows_deleted       NUMBER := 0;
Line: 530

  BIS_COLLECTION_UTILITIES.deleteLogForObject('BIX_EMAIL_DETAILS_F');
Line: 569

  /* Insert / Update additive measures to summary table bix_email_details_f */
  INSERT /*+ APPEND PARALLEL(bed) */ INTO BIX_EMAIL_DETAILS_F bed
     (email_account_id,
      email_classification_id,
      agent_id,
      party_id,
      time_id,
      period_type_id,
      period_start_date,
      period_start_time,
	 outcome_id,
	 result_id,
	 reason_id,
      created_by,
      creation_date,
      last_updated_by,
      last_update_date,
      emails_offered_in_period,
      emails_fetched_in_period,
      emails_replied_in_period,
      emails_rpld_by_goal_in_period,
      AGENT_EMAILS_RPLD_BY_GOAL,
      emails_deleted_in_period,
      emails_trnsfrd_out_in_period,
      emails_trnsfrd_in_in_period,
      emails_assigned_in_period,
      emails_auto_routed_in_period,
      emails_auto_uptd_sr_in_period,
      email_resp_time_in_period,
      agent_resp_time_in_period,
      sr_created_in_period,
      emails_rsl_and_trfd_in_period,
	 emails_orr_count_in_period,
	 EMAILS_AUTO_REPLIED_IN_PERIOD,
	 EMAILS_AUTO_DELETED_IN_PERIOD,
	 EMAILS_AUTO_RESOLVED_IN_PERIOD,
	 emails_composed_in_period,
	 emails_rerouted_in_period,
	 leads_created_in_period,
      request_id,
      program_application_id,
      program_id,
      program_update_date)
  (SELECT /*+ PARALLEL(inv2) */
      inv2.email_account_id,
      inv2.email_classification_id,
      inv2.agent_id,
      inv2.party_id,
      inv2.time_id,
      --1/2hr changed period_type_id to 1 from -1
      1,
      inv2.period_start_date,
      inv2.period_start_time,
	 inv2.outcome_id,
	 inv2.result_id,
	 inv2.reason_id,
      g_user_id,
      g_sysdate,
      g_user_id,
      g_sysdate,
      decode(sum(emails_offered_in_period), 0, to_number(null), sum(emails_offered_in_period)),
      decode(sum(emails_fetched_in_period), 0, to_number(null), sum(emails_fetched_in_period)),
      decode(sum(emails_replied_in_period), 0, to_number(null), sum(emails_replied_in_period)),
      decode(sum(emails_rpld_by_goal_in_period), 0, to_number(null), sum(emails_rpld_by_goal_in_period)),
      decode(sum(AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(AGENT_EMAILS_RPLD_BY_GOAL)),
      decode(sum(emails_deleted_in_period), 0, to_number(null), sum(emails_deleted_in_period)),
      decode(sum(emails_trnsfrd_out_in_period), 0, to_number(null), sum(emails_trnsfrd_out_in_period)),
      decode(sum(emails_trnsfrd_in_in_period), 0, to_number(null), sum(emails_trnsfrd_in_in_period)),
      decode(sum(emails_assigned_in_period), 0, to_number(null), sum(emails_assigned_in_period)),
      decode(sum(emails_auto_routed_in_period), 0, to_number(null), sum(emails_auto_routed_in_period)),
      decode(sum(emails_auto_uptd_sr_in_period), 0, to_number(null), sum(emails_auto_uptd_sr_in_period)),
      decode(round(sum(email_resp_time_in_period)), 0, to_number(null), round(sum(email_resp_time_in_period))),
      decode(round(sum(agent_resp_time_in_period)), 0, to_number(null), round(sum(agent_resp_time_in_period))),
      decode(sum(sr_created_in_period), 0, to_number(null), sum(sr_created_in_period)),
      decode(sum(emails_rsl_and_trfd_in_period), 0, to_number(null), sum(emails_rsl_and_trfd_in_period)),
	 decode(sum(emails_orr_count_in_period), 0, to_number(null), sum(emails_orr_count_in_period)),
	 decode(sum(EMAILS_AUTO_REPLIED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_REPLIED_IN_PERIOD)),
	 decode(sum(EMAILS_AUTO_DELETED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_DELETED_IN_PERIOD)),
	 decode(sum(EMAILS_AUTO_RESOLVED_IN_PERIOD), 0, to_number(null), sum(EMAILS_AUTO_RESOLVED_IN_PERIOD)),
	 decode(sum(emails_composed_in_period), 0, to_number(null), sum(emails_composed_in_period)),
	 decode(sum(EMAILS_REROUTED_IN_PERIOD), 0, to_number(null), sum(EMAILS_REROUTED_IN_PERIOD)),
	 decode(sum(leads_created_in_period), 0, to_number(null), sum(leads_created_in_period)),
      g_request_id,
      g_program_appl_id,
      g_program_id,
      g_sysdate
   FROM  --This sql fetches the count of a whole bunch of pure email measures like fetched, replied etc
    (SELECT /*+ use_hash(mitm) use_hash(mseg) use_hash(inv2) use_hash(inv1) use_hash(mtyp) use_hash(irc)
                PARALLEL(mitm) PARALLEL(mseg) PARALLEL(inv2) PARALLEL(inv1) PARALLEL(mtyp) PARALLEL(irc) */
      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
      nvl(mseg.resource_id, -1)                            AGENT_ID,
      nvl(inv1.party_id, -1)                               PARTY_ID,
      trunc(mseg.start_date_time)                          PERIOD_START_DATE,
      to_number(to_char(mseg.start_date_time, 'J'))        TIME_ID,
      --1/2hr
      --nvl(lpad(to_char(mseg.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(mseg.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
      '00:00'
                                                           PERIOD_START_TIME,
      -1                                                   OUTCOME_ID,
      -1                                                   RESULT_ID,
      -1                                                   REASON_ID,
      0                                                    EMAILS_OFFERED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_FETCH',1))         EMAILS_FETCHED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_REPLY',1))         EMAILS_REPLIED_IN_PERIOD,

      sum(decode(mtyp.milcs_code,'EMAIL_REPLY', (mseg.start_date_time - inv2.start_date_time) * 24 * 60 * 60))
                                                           AGENT_RESP_TIME_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_REPLY',
               decode(sign(l_email_service_level  - (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60),-1,0,1)
			, 'EMAIL_AUTO_REPLY',
			 decode(sign(l_email_service_level  - (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60),-1,0,1) ))
                                                           EMAILS_RPLD_BY_GOAL_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_REPLY',
                     decode(sign(l_email_service_level  - (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60),-1,0,1)
      			 ))
                                                                 AGENT_EMAILS_RPLD_BY_GOAL,
      sum(decode(mtyp.milcs_code,'EMAIL_TRANSFERRED',1,'EMAIL_ESCALATED',1))   EMAILS_TRNSFRD_OUT_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_TRANSFER',1))      EMAILS_TRNSFRD_IN_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_ASSIGNED',1))      EMAILS_ASSIGNED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_AUTO_ROUTED',1))   EMAILS_AUTO_ROUTED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_AUTO_UPDATED_SR',1))
                                                           EMAILS_AUTO_UPTD_SR_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_DELETED',1))       EMAILS_DELETED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_REPLY', (mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60,
	                       'EMAIL_AUTO_REPLY',(mseg.start_date_time - mitm.start_date_time) * 24 * 60 * 60))
                                                           EMAIL_RESP_TIME_IN_PERIOD,
      0                                                    SR_CREATED_IN_PERIOD,
      0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_AUTO_REPLY',1))    EMAILS_AUTO_REPLIED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_AUTO_DELETED',1))  EMAILS_AUTO_DELETED_IN_PERIOD,
      sum(decode(mtyp.milcs_code,'EMAIL_RESOLVED',1))      EMAILS_AUTO_RESOLVED_IN_PERIOD,
      0                                                    emails_composed_in_period,
	 0                                                    emails_orr_count_in_period,
	 sum(decode(mtyp.milcs_code,'EMAIL_REROUTED_DIFF_CLASS',1,
	                            'EMAIL_REROUTED_DIFF_ACCT',1,
						   'EMAIL_REQUEUED',1 )) EMAILS_REROUTED_IN_PERIOD,
      0                                                    LEADS_CREATED_IN_PERIOD
    FROM
      JTF_IH_MEDIA_ITEMS mitm,
      JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
      (
         SELECT /*+ use_hash(mseg1) use_hash(mtyp1) use_hash(mseg2) use_hash(mtyp2)
                    PARALLEL(mseg1) PARALLEL(mtyp1) PARALLEL(mseg2) PARALLEL(mtyp2) */
           mseg1.media_id             media_id,
           MAX(mseg2.start_date_time) start_date_time
         FROM
           jtf_ih_media_item_lc_segs mseg1,
           jtf_ih_media_itm_lc_seg_tys mtyp1,
           jtf_ih_media_item_lc_segs mseg2,
           jtf_ih_media_itm_lc_seg_tys mtyp2
         WHERE mseg1.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   mseg1.milcs_type_id = mtyp1.milcs_type_id
         AND   mtyp1.milcs_code    = 'EMAIL_REPLY'
         AND   mseg1.media_id      = mseg2.media_id
         AND   mseg2.milcs_type_id = mtyp2.milcs_type_id
         AND   mtyp2.milcs_code    IN ('EMAIL_FETCH','EMAIL_TRANSFER', 'EMAIL_ASSIGN_OPEN', 'EMAIL_AUTO_ROUTED', 'EMAIL_ASSIGNED')
         GROUP BY mseg1.media_id
      ) inv2,
      (
         SELECT /*+ use_hash(actv) use_hash(intr) PARALLEL(actv) PARALLEL(intr) */
           actv.media_id        media_id,
           min(intr.party_id)   party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
         GROUP BY actv.media_id
      ) inv1,
      JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyp,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) irc
    WHERE mitm.media_item_type = 'EMAIL'
    AND   mitm.direction = 'INBOUND'
    AND   mitm.classification  = irc.name(+)
    AND   mitm.media_id        = inv2.media_id(+)
    AND   mitm.media_id        = inv1.media_id(+)
    AND   mitm.MEDIA_ID        = mseg.MEDIA_ID
    AND   mseg.MILCS_TYPE_ID   = mtyp.MILCS_TYPE_ID
    AND   mseg.START_DATE_TIME BETWEEN  g_collect_start_date and g_collect_end_date
    GROUP BY
      nvl(mitm.source_id, -1),
      nvl(irc.route_classification_id, -1),
      mseg.resource_id,
      nvl(inv1.party_id, -1),
      trunc(mseg.start_date_time),
      to_number(to_char(mseg.start_date_time, 'J'))
      --1/2hr
      --nvl(lpad(to_char(mseg.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(mseg.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
    UNION ALL --This sql counts the number of emails offered in the given period grouped together by day
    SELECT /*+ use_hash(mitm) use_hash(inv1) use_hash(irc) PARALLEL(mitm) PARALLEL(inv1) PARALLEL(irc) */
      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
      -1                                                   AGENT_ID,
      nvl(inv1.party_id, -1)                               PARTY_ID,
      trunc(mitm.start_date_time)                          PERIOD_START_DATE,
      to_number(to_char(mitm.start_date_time, 'J'))        TIME_ID,
      --1/2hr
      --nvl(lpad(to_char(mitm.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(mitm.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
      '00:00'
                                                           PERIOD_START_TIME,
      -1                                                   OUTCOME_ID,
      -1                                                   RESULT_ID,
      -1                                                   REASON_ID,
      COUNT(*)                                             EMAILS_OFFERED_IN_PERIOD,
      0                                                    EMAILS_FETCHED_IN_PERIOD,
      0                                                    EMAILS_REPLIED_IN_PERIOD,
      0                                                    AGENT_RESP_TIME_IN_PERIOD,
      0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
      0							   AGENT_EMAILS_RPLD_BY_GOAL,
      0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
      0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
      0                                                    EMAILS_ASSIGNED_IN_PERIOD,
      0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
      0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
      0                                                    EMAILS_DELETED_IN_PERIOD,
      0                                                    EMAIL_RESP_TIME_IN_PERIOD,
      0                                                    SR_CREATED_IN_PERIOD,
      0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
      0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
      0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
      0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
      0                                                    emails_composed_in_period,
	 0                                                    emails_orr_count_in_period,
      0                                                    EMAILS_REROUTED_IN_PERIOD,
      0                                                    LEADS_CREATED_IN_PERIOD
    FROM
      JTF_IH_MEDIA_ITEMS mitm,
      (
         SELECT /*+ use_hash(actv) use_hash(intr) PARALLEL(actv) PARALLEL(intr) */
           actv.media_id        media_id,
           min(intr.party_id)   party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
         GROUP BY actv.media_id
      ) inv1,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) irc
    WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
    AND   mitm.DIRECTION       = 'INBOUND'
    AND   mitm.classification  = irc.name(+)
    AND   mitm.media_id        = inv1.media_id(+)
    AND   mitm.START_DATE_TIME BETWEEN  g_collect_start_date and g_collect_end_date
    GROUP BY
      nvl(mitm.source_id, -1),
      nvl(irc.route_classification_id, -1),
      nvl(inv1.party_id, -1),
      trunc(mitm.start_date_time),
      to_number(to_char(mitm.start_date_time, 'J'))
      --1/2hr
      --nvl(lpad(to_char(mitm.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(mitm.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
    UNION ALL -- This sql segment counts the number of emails/SR created
    SELECT /*+ use_hash(actv) use_hash(intr) use_hash(mitm) use_hash(irc)
			PARALLEL(actv) PARALLEL(intr) PARALLEL(mitm) PARALLEL(irc) */
      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
      nvl(intr.resource_id, -1)                            AGENT_ID,
      nvl(intr.party_id, -1)                               PARTY_ID,
      trunc(actv.start_date_time)                          PERIOD_START_DATE,
      to_number(to_char(actv.start_date_time, 'J'))        TIME_ID,
      --1/2hr
      --nvl(lpad(to_char(actv.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(actv.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
      '00:00'
                                                           PERIOD_START_TIME,
      -1                                                   OUTCOME_ID,
      -1                                                   RESULT_ID,
      -1                                                   REASON_ID,
      0                                                    EMAILS_OFFERED_IN_PERIOD,
      0                                                    EMAILS_FETCHED_IN_PERIOD,
      0                                                    EMAILS_REPLIED_IN_PERIOD,
      0                                                    AGENT_RESP_TIME_IN_PERIOD,
      0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
      0							   AGENT_EMAILS_RPLD_BY_GOAL,
      0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
      0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
      0                                                    EMAILS_ASSIGNED_IN_PERIOD,
      0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
      0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
      0                                                    EMAILS_DELETED_IN_PERIOD,
      0                                                    EMAIL_RESP_TIME_IN_PERIOD,
      SUM(DECODE(actv.action_id,13,1))                     SR_CREATED_IN_PERIOD,
      0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
	 0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
      0                                                    emails_composed_in_period,
	 0                                                    emails_orr_count_in_period,
      0                                                    EMAILS_REROUTED_IN_PERIOD,
      SUM(DECODE(actv.action_id,71,1))                       LEADS_CREATED_IN_PERIOD
    FROM
      JTF_IH_ACTIVITIES actv,
      JTF_IH_INTERACTIONS intr,
      JTF_IH_MEDIA_ITEMS mitm,
	 (select
	    actv.interaction_id interaction_id,
	    max(mitm.classification) classification
       from
	    jtf_ih_activities actv,
	    jtf_ih_activities actv1,
	    jtf_ih_media_items mitm
       where actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
	  and   actv.interaction_id = actv1.interaction_id
	  and   actv1.media_id = mitm.media_id
	  and   mitm.direction = 'INBOUND'
	  and   mitm.media_item_type = 'EMAIL'
	  group by actv.interaction_id ) inv2,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) irc
    WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
    AND ( ( actv.action_id = 13 AND  actv.action_item_id = 17  ) OR
          ( actv.action_id = 71  AND  actv.action_item_id = 8 )
        )
    AND   actv.media_id = mitm.media_id
    AND   mitm.MEDIA_ITEM_TYPE = 'EMAIL'
    AND   inv2.classification  = irc.name(+)
    AND   actv.interaction_id = intr.interaction_id
    AND   actv.interaction_id = inv2.interaction_id(+)
    GROUP BY
      nvl(mitm.source_id, -1),
      nvl(irc.route_classification_id, -1),
      intr.resource_id,
      nvl(intr.party_id, -1),
      trunc(actv.start_date_time),
      to_number(to_char(actv.start_date_time, 'J'))
      --1/2hr
      --nvl(lpad(to_char(actv.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(actv.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
    UNION ALL -- This sql counts the number of emails resolved and transferred within the period grouped together by a day
    SELECT /*+ use_hash(inv2) use_hash(mitm) use_hash(mseg) use_hash(mtyp) use_hash(irc)
			PARALLEL(inv2) PARALLEL(mitm) PARALLEL(mseg) PARALLEL(mtyp) PARALLEL(irc) */
      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
      nvl(mseg.resource_id, -1)                            AGENT_ID,
      nvl(inv2.party_id, -1)                                PARTY_ID,
      trunc(mseg.start_date_time)                          PERIOD_START_DATE,
      to_number(to_char(mseg.start_date_time, 'J'))        TIME_ID,
      --1/2hr
      --nvl(lpad(to_char(mseg.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(mseg.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
      '00:00'
                                                           PERIOD_START_TIME,
      -1                                                   OUTCOME_ID,
      -1                                                   RESULT_ID,
      -1                                                   REASON_ID,
      0                                                    EMAILS_OFFERED_IN_PERIOD,
      0                                                    EMAILS_FETCHED_IN_PERIOD,
      0                                                    EMAILS_REPLIED_IN_PERIOD,
      0                                                    AGENT_RESP_TIME_IN_PERIOD,
      0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
      0							   AGENT_EMAILS_RPLD_BY_GOAL,
      0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
      0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
      0                                                    EMAILS_ASSIGNED_IN_PERIOD,
      0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
      0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
      0                                                    EMAILS_DELETED_IN_PERIOD,
      0                                                    EMAIL_RESP_TIME_IN_PERIOD,
      0                                                    SR_CREATED_IN_PERIOD,
      count(*)                                             EMAILS_RSL_AND_TRFD_IN_PERIOD,
	 0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
      0                                                    emails_composed_in_period,
      0                                                    emails_orr_count_in_period,
      0                                                    EMAILS_REROUTED_IN_PERIOD,
      0                                                    LEADS_CREATED_IN_PERIOD
    FROM
      (
         SELECT /*+ use_hash(actv) use_hash(intr) PARALLEL(actv) PARALLEL(intr) */
           actv.media_id        media_id,
           min(intr.party_id)   party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
         GROUP BY actv.media_id
      ) inv2,
      JTF_IH_MEDIA_ITEMS mitm,
      JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
      JTF_IH_MEDIA_ITM_LC_SEG_TYS mtyp,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) irc
    WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
    AND   mitm.DIRECTION       = 'INBOUND'
    AND   mitm.classification  = irc.name(+)
    AND   mitm.media_id        = inv2.media_id(+)
    AND   mitm.MEDIA_ID        = mseg.MEDIA_ID
    AND   mseg.MILCS_TYPE_ID   = mtyp.MILCS_TYPE_ID
    AND   mtyp.MILCS_CODE      IN ('EMAIL_REPLY', 'EMAIL_DELETED')
    AND   mseg.START_DATE_TIME BETWEEN  g_collect_start_date and g_collect_end_date
    AND   EXISTS (
            SELECT /*+ use_hash(mseg1) use_hash(mtys1) PARALLEL(mseg1) PARALLEL(mtys1) */
                   1
            FROM
                   jtf_ih_media_item_lc_segs mseg1,
                   jtf_ih_media_itm_lc_seg_tys mtys1
            WHERE mseg1.media_id = mitm.media_id
            AND   mtys1.milcs_type_id = mseg1.milcs_type_id
            AND   mtys1.milcs_code IN ( 'EMAIL_TRANSFERRED','EMAIL_ESCALATED') )
    GROUP BY
      nvl(mitm.source_id, -1),
      nvl(irc.route_classification_id, -1),
      nvl(mseg.resource_id, -1),
      nvl(inv2.party_id, -1),
      trunc(mseg.start_date_time),
      to_number(to_char(mseg.start_date_time, 'J'))
      --1/2hr
      --nvl(lpad(to_char(mseg.start_date_time,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(mseg.start_date_time,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
    UNION ALL	  -- This sql segment collects inbound email outcome count
    SELECT /*+ use_hash(inv2) use_hash(mitm) use_hash(mseg) use_hash(mtyp) use_hash(irc)
			PARALLEL(inv2) PARALLEL(mitm) PARALLEL(mseg) PARALLEL(mtyp) PARALLEL(irc)
			use_hash(actv) use_hash(intr) PARALLEL(actv) PARALLEL(intr)  */
      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
      nvl(intr.resource_id, -1)                             AGENT_ID,
      nvl(intr.party_id, -1)                                PARTY_ID,
      trunc(intr.last_update_date)                          PERIOD_START_DATE,
      to_number(to_char(intr.last_update_date, 'J'))        TIME_ID,
      --1/2hr
      --nvl(lpad(to_char(intr.last_update_date,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(intr.last_update_date,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
      --Replacing with 00:00 since we are going to ignore 1/2 hr segments
	  '00:00'                                                     PERIOD_START_TIME,
      NVL(intr.outcome_id,-1)                              OUTCOME_ID,
      NVL(intr.result_id,-1)                               RESULT_ID,
      NVL(intr.reason_id,-1)                               REASON_ID,
      0                                                    EMAILS_OFFERED_IN_PERIOD,
      0                                                    EMAILS_FETCHED_IN_PERIOD,
      0                                                    EMAILS_REPLIED_IN_PERIOD,
      0                                                    AGENT_RESP_TIME_IN_PERIOD,
      0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
      0							   AGENT_EMAILS_RPLD_BY_GOAL,
      0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
      0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
      0                                                    EMAILS_ASSIGNED_IN_PERIOD,
      0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
      0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
      0                                                    EMAILS_DELETED_IN_PERIOD,
      0                                                    EMAIL_RESP_TIME_IN_PERIOD,
      0                                                    SR_CREATED_IN_PERIOD,
      0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
	 0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
	 0                                                    emails_composed_in_period,
	 COUNT(DISTINCT intr.interaction_id)                  emails_orr_count_in_period,
      0                                                    EMAILS_REROUTED_IN_PERIOD,
      0                                                    LEADS_CREATED_IN_PERIOD
    FROM
      JTF_IH_MEDIA_ITEMS mitm,
	 JTF_IH_ACTIVITIES actv,
	 JTF_IH_INTERACTIONS intr,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) irc
    WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
    AND   mitm.direction = 'INBOUND'
    AND   mitm.classification  = irc.name(+)
    AND   mitm.media_id        = actv.media_id
    AND   actv.interaction_id  = intr.interaction_id
    AND   intr.LAST_UPDATE_DATE BETWEEN  g_collect_start_date and g_collect_end_date
    AND   intr.outcome_id IS NOT NULL
    GROUP BY
      nvl(mitm.source_id, -1),
      nvl(irc.route_classification_id, -1),
      nvl(intr.resource_id, -1),
      nvl(intr.party_id, -1),
      trunc(intr.last_update_date),
      to_number(to_char(intr.last_update_date, 'J')),
      --1/2hr
      --nvl(lpad(to_char(intr.last_update_date,'HH24:'),3,'0') ||
      --decode(sign(to_number(to_char(intr.last_update_date,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00'),
      NVL(intr.outcome_id,-1),
      NVL(intr.result_id,-1),
      NVL(intr.reason_id,-1)
    UNION ALL	   -- This sql segment collects outbound email outcome count
    SELECT /*+ use_hash(inv2) use_hash(mitm) use_hash(mseg) use_hash(mtyp) use_hash(irc)
			PARALLEL(inv2) PARALLEL(mitm) PARALLEL(mseg) PARALLEL(mtyp) PARALLEL(irc)
			use_hash(actv) use_hash(intr) PARALLEL(actv) PARALLEL(intr)  */
      nvl(mitm.source_id, -1)                              EMAIL_ACCOUNT_ID,
      nvl(irc.route_classification_id, -1)                 EMAIL_CLASSIFICATION_ID,
      nvl(intr.resource_id, -1)                             AGENT_ID,
      nvl(intr.party_id, -1)                                PARTY_ID,
      trunc(intr.last_update_date)                          PERIOD_START_DATE,
      to_number(to_char(intr.last_update_date, 'J'))        TIME_ID,
      --1/2hr
      --nvl(lpad(to_char(intr.last_update_date,'HH24:'),3,'0') ||
      --  decode(sign(to_number(to_char(intr.last_update_date,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00')
      '00:00'                                                     PERIOD_START_TIME,
      NVL(intr.outcome_id,-1)                              OUTCOME_ID,
      NVL(intr.result_id,-1)                               RESULT_ID,
      NVL(intr.reason_id,-1)                               REASON_ID,
      0                                                    EMAILS_OFFERED_IN_PERIOD,
      0                                                    EMAILS_FETCHED_IN_PERIOD,
      0                                                    EMAILS_REPLIED_IN_PERIOD,
      0                                                    AGENT_RESP_TIME_IN_PERIOD,
      0                                                    EMAILS_RPLD_BY_GOAL_IN_PERIOD,
      0							   AGENT_EMAILS_RPLD_BY_GOAL,
      0                                                    EMAILS_TRNSFRD_OUT_IN_PERIOD,
      0                                                    EMAILS_TRNSFRD_IN_IN_PERIOD,
      0                                                    EMAILS_ASSIGNED_IN_PERIOD,
      0                                                    EMAILS_AUTO_ROUTED_IN_PERIOD,
      0                                                    EMAILS_AUTO_UPTD_SR_IN_PERIOD,
      0                                                    EMAILS_DELETED_IN_PERIOD,
      0                                                    EMAIL_RESP_TIME_IN_PERIOD,
      0                                                    SR_CREATED_IN_PERIOD,
      0                                                    EMAILS_RSL_AND_TRFD_IN_PERIOD,
	 0                                                    EMAILS_AUTO_REPLIED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_DELETED_IN_PERIOD,
	 0                                                    EMAILS_AUTO_RESOLVED_IN_PERIOD,
	 COUNT(distinct mitm.media_id)                        emails_composed_in_period,
	 COUNT(DISTINCT intr.interaction_id)                  emails_orr_count_in_period,
      0                                                    EMAILS_REROUTED_IN_PERIOD,
      0                                                    LEADS_CREATED_IN_PERIOD
    FROM
      JTF_IH_MEDIA_ITEMS mitm,
	 JTF_IH_MEDIA_ITEM_LC_SEGS segs,
	 JTF_IH_MEDIA_ITM_LC_SEG_TYS seg_type,
	 JTF_IH_ACTIVITIES actv,
	 JTF_IH_INTERACTIONS intr,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) irc
    WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
    AND   mitm.direction = 'OUTBOUND'
    AND   mitm.media_id = segs.media_id
    AND   segs.milcs_type_id = seg_type.milcs_type_id
    AND   seg_type.milcs_code = 'EMAIL_COMPOSE'
    AND   mitm.classification  = irc.name(+)
    AND   mitm.media_id        = actv.media_id
    AND   actv.interaction_id  = intr.interaction_id
    AND   intr.LAST_UPDATE_DATE BETWEEN  g_collect_start_date and g_collect_end_date
    AND   intr.outcome_id IS NOT NULL
    GROUP BY
      nvl(mitm.source_id, -1),
      nvl(irc.route_classification_id, -1),
      nvl(intr.resource_id, -1),
      nvl(intr.party_id, -1),
      trunc(intr.last_update_date),
      to_number(to_char(intr.last_update_date, 'J')),
      --1/2hr
      --nvl(lpad(to_char(intr.last_update_date,'HH24:'),3,'0') ||
      --decode(sign(to_number(to_char(intr.last_update_date,'MI'))-29),0,'00',1,'30',-1,'00'),'00:00'),
      NVL(intr.outcome_id,-1),
      NVL(intr.result_id,-1),
      NVL(intr.reason_id,-1)
   ) inv2
  GROUP BY
      inv2.email_account_id,
      inv2.email_classification_id,
      inv2.agent_id,
      inv2.party_id,
      inv2.time_id,
      inv2.period_start_date,
      inv2.period_start_time,
	 inv2.outcome_id,
	 inv2.result_id,
	 inv2.reason_id);
Line: 1175

  write_log('Number of rows inserted in table bix_email_details_f : ' || to_char(SQL%ROWCOUNT));
Line: 1179

  /* Estimating statistics as we are going to update these rows for the open measures */
  DBMS_STATS.gather_table_stats(ownname => g_bix_schema,
                                tabName => 'BIX_EMAIL_DETAILS_F',
                                cascade => TRUE,
                                degree => bis_common_parameters.get_degree_of_parallelism,
                                estimate_percent => 10,
                                granularity => 'GLOBAL');
Line: 1195

PROCEDURE update_queue_measure (p_email_account_id IN OUT NOCOPY g_email_account_id_tab,
                                p_email_classification_id IN OUT NOCOPY g_email_classification_id_tab,
                                p_party_id IN OUT NOCOPY g_party_id_tab,
                                p_period_start_date IN OUT NOCOPY g_period_start_date_tab,
                                p_emails_in_queue IN OUT NOCOPY g_emails_in_queue_tab,
                                p_total_queue_time IN OUT NOCOPY g_total_queue_time_tab,
                                p_oldest_message_in_queue IN OUT NOCOPY g_oldest_message_in_queue_tab,
                                p_acc_emails_one_day IN OUT NOCOPY g_acc_emails_one_day_tab,
                                p_acc_emails_three_days IN OUT NOCOPY g_acc_emails_three_days_tab,
                                p_acc_emails_week IN OUT NOCOPY g_acc_emails_week_tab,
                                p_acc_emails_week_plus IN OUT NOCOPY g_acc_emails_week_plus_tab) IS
BEGIN

  write_log('Start of the procedure update_queue_measure at ' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss'));
Line: 1210

  /* Update ICI summary table for the queue measures */
  FORALL i in p_email_account_id.FIRST .. p_email_account_id.LAST
  MERGE INTO bix_email_details_f bed
  USING (
    SELECT
      p_email_account_id(i) email_account_id,
      p_email_classification_id(i) email_classification_id,
      -1 agent_id,
      p_party_id(i) party_id,
      to_number(to_char(p_period_start_date(i), 'J')) time_id,
      --1/2hr change the period type id to 1 from -1
      1 period_type_id,
      trunc(p_period_start_date(i)) period_start_date,
      LPAD(TO_CHAR(p_period_start_date(i),'HH24:MI'), 5, '0') period_start_time,
      nvl(p_emails_in_queue(i),0) accumulated_emails_in_queue,
      nvl(p_total_queue_time(i),0) accumulated_queue_time,
      p_oldest_message_in_queue(i) oldest_email_queue_date,
      nvl(p_acc_emails_one_day(i),0) accumulated_emails_one_day,
      nvl(p_acc_emails_three_days(i),0) accumulated_emails_three_days,
      nvl(p_acc_emails_week(i),0) accumulated_emails_week,
      nvl(p_acc_emails_week_plus(i),0) accumulated_emails_week_plus
    FROM dual) change
  ON (bed.email_account_id = change.email_account_id
    AND bed.email_classification_id = change.email_classification_id
    AND bed.agent_id = change.agent_id
    AND bed.party_id = change.party_id
    AND bed.time_id = change.time_id
    AND bed.period_type_id = change.period_type_id
    AND bed.period_start_date = change.period_start_date
    AND bed.period_start_time = change.period_start_time
    AND bed.outcome_id = -1 AND bed.result_id = -1 AND bed.reason_id = -1 )
  WHEN MATCHED THEN
    UPDATE
    SET
      bed.accumulated_emails_in_queue = decode(change.accumulated_emails_in_queue, 0, bed.accumulated_emails_in_queue,
                           NVL(bed.accumulated_emails_in_queue, 0) + change.accumulated_emails_in_queue),
      bed.accumulated_queue_time = decode(change.accumulated_queue_time, 0, bed.accumulated_queue_time,
                           NVL(bed.accumulated_queue_time, 0) + change.accumulated_queue_time),
      bed.accumulated_emails_one_day = decode(change.accumulated_emails_one_day, 0, bed.accumulated_emails_one_day,
                           NVL(bed.accumulated_emails_one_day, 0) + change.accumulated_emails_one_day),
      bed.accumulated_emails_three_days = decode(change.accumulated_emails_three_days, 0, bed.accumulated_emails_three_days,
                           NVL(bed.accumulated_emails_three_days, 0) + change.accumulated_emails_three_days),
      bed.accumulated_emails_week = decode(change.accumulated_emails_week, 0, bed.accumulated_emails_week,
                           NVL(bed.accumulated_emails_week, 0) + change.accumulated_emails_week),
      bed.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus, 0, bed.accumulated_emails_week_plus,
                           NVL(bed.accumulated_emails_week_plus, 0) + change.accumulated_emails_week_plus),
      bed.oldest_email_queue_date =
             DECODE(change.oldest_email_queue_date,NULL,bed.oldest_email_queue_date,
               DECODE(bed.oldest_email_queue_date,NULL,change.oldest_email_queue_date,
                 DECODE(SIGN(bed.oldest_email_queue_date - change.oldest_email_queue_date),
                    -1,bed.oldest_email_queue_date, change.oldest_email_queue_date))),
        bed.last_update_date =  g_sysdate,
        bed.last_updated_by = g_user_id
  WHEN NOT MATCHED THEN INSERT (
        bed.email_account_id,
        bed.email_classification_id,
        bed.agent_id,
        bed.party_id,
	   bed.outcome_id,
	   bed.result_id,
	   bed.reason_id,
        bed.time_id,
        bed.period_type_id,
        bed.period_start_date,
        bed.period_start_time,
        bed.created_by,
        bed.creation_date,
        bed.last_updated_by,
        bed.last_update_date,
        bed.accumulated_emails_in_queue,
        bed.accumulated_queue_time,
        bed.oldest_email_queue_date,
        bed.accumulated_emails_one_day,
        bed.accumulated_emails_three_days,
        bed.accumulated_emails_week,
        bed.accumulated_emails_week_plus,
        bed.request_id,
        bed.program_application_id,
        bed.program_id,
        bed.program_update_date)
      VALUES (
        change.email_account_id,
        change.email_classification_id,
        change.agent_id,
        change.party_id,
	   -1,
	   -1,
	   -1,
        change.time_id,
        change.period_type_id,
        change.period_start_date,
        change.period_start_time,
        g_user_id,
        g_sysdate,
        g_user_id,
        g_sysdate,
        decode(change.accumulated_emails_in_queue, 0, to_number(null), change.accumulated_emails_in_queue),
        decode(change.accumulated_queue_time, 0, to_number(null), change.accumulated_queue_time),
        change.oldest_email_queue_date,
        decode(change.accumulated_emails_one_day, 0, to_number(null), change.accumulated_emails_one_day),
        decode(change.accumulated_emails_three_days, 0, to_number(null), change.accumulated_emails_three_days),
        decode(change.accumulated_emails_week, 0, to_number(null), change.accumulated_emails_week),
        decode(change.accumulated_emails_week_plus, 0, to_number(null), change.accumulated_emails_week_plus),
        g_request_id,
        g_program_appl_id,
        g_program_id,
        g_sysdate);
Line: 1322

  write_log('Finished procedure update_queue_measure at ' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss'));
Line: 1326

    write_log('Error in update_queue_measure : Error : ' || sqlerrm);
Line: 1328

END update_queue_measure;
Line: 1331

This splits the data to mutliple time buckets.  Then it calls update_queue_measures
which does the actual MERGE of the data
***/

PROCEDURE process_queue_measure_row(p_media_id IN OUT NOCOPY g_media_id_tab,
                                    p_email_account_id IN OUT NOCOPY g_email_account_id_tab,
                                    p_email_classification_id IN OUT NOCOPY g_email_classification_id_tab,
                                    p_party_id IN OUT NOCOPY g_party_id_tab,
                                    p_start_date_time IN OUT NOCOPY g_start_date_time_tab,
                                    p_end_date_time IN OUT NOCOPY g_end_date_time_tab,
                                    p_media_start_date_time IN OUT NOCOPY g_media_start_date_time_tab,
                                    p_period_start_date_time IN OUT NOCOPY g_start_date_time_tab,
                                    p_period_end_date_time IN OUT NOCOPY g_end_date_time_tab)
IS

  l_email_account_id g_email_account_id_tab;
Line: 1461

        update_queue_measure (l_email_account_id,
                              l_email_classification_id,
                              l_party_id,
                              l_period_start_date,
                              l_emails_in_queue,
                              l_total_queue_time,
                              l_oldest_message_in_queue,
                              l_acc_emails_one_day,
                              l_acc_emails_three_days,
                              l_acc_emails_week,
                              l_acc_emails_week_plus);
Line: 1493

    update_queue_measure (l_email_account_id,
                          l_email_classification_id,
                          l_party_id,
                          l_period_start_date,
                          l_emails_in_queue,
                          l_total_queue_time,
                          l_oldest_message_in_queue,
                          l_acc_emails_one_day,
                          l_acc_emails_three_days,
                          l_acc_emails_week,
                          l_acc_emails_week_plus);
Line: 1536

be inserted one for each day with accumulated_emails_in_queue as 1 for both days.

If there is no emails in queue for particular combination dimensions
this procedure populates null.

====================================================================+*/



PROCEDURE collect_queue_measures AS

  CURSOR queue_measures IS
--
--This is the query for collecting emails which are still in system queue
--PERIOD START DATE will be either global start date or the start of the media segment
--PERIOD END DATE will be the g_collect_end_date since the emails are still in
--QUEUE.
--
  SELECT /*+ use_hash(mitm) use_hash(mseg) use_hash(mtys) use_hash(cls) use_hash(inv2) */
    mitm.media_id                        MEDIA_ID,
    nvl(mitm.source_id, -1)              EMAIL_ACCOUNT_ID,
    nvl(cls.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
    nvl(inv2.party_id, -1)                PARTY_ID,
    mseg.start_date_time                 START_DATE_TIME,
    g_collect_end_date                   END_DATE_TIME,
    mitm.start_date_time                 MEDIA_START_DATE_TIME,
    --1/2hr
    decode(sign(mseg.start_date_time - g_collect_start_date), -1, g_collect_start_date,
             to_date(to_char(mseg.start_date_time ,'YYYY/MM/DD ')|| '00:'
               || '00',
                 'YYYY/MM/DD HH24:MI')) PERIOD_START_DATE_TIME,
    --1/2hr do we need to modify the collect end data to capture data upto the second?
    g_collect_end_date -- - (( 29 * 60 + 59 )/(24*60*60))
                                        PERIOD_END_DATE_TIME
  FROM
    JTF_IH_MEDIA_ITEMS          mitm,
    JTF_IH_MEDIA_ITEM_LC_SEGS   mseg,
    JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) cls,
    (
        --????Changed for party_id
         --SELECT /*+ use_hash(actv) use_hash(intr) */
           --actv.media_id        media_id,
           --min(intr.party_id)   party_id
         --FROM
           --jtf_ih_activities actv,
           --jtf_ih_interactions intr
         --WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         --AND   actv.interaction_id = intr.interaction_id
         --GROUP BY actv.media_id
         SELECT /*+ use_hash(actv) use_hash(intr) */
           distinct actv.media_id        media_id,
           first_value(intr.party_id)
           over(partition by actv.media_id order by actv.interaction_id desc) party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
    ) inv2
  WHERE mitm.MEDIA_ITEM_TYPE = 'EMAIL'
  AND   mitm.DIRECTION       = 'INBOUND'
  AND   mitm.classification  = cls.name(+)
  AND   mitm.MEDIA_ID        = mseg.MEDIA_ID
  AND   mseg.START_DATE_TIME < g_collect_end_date
  AND   mseg.MILCS_TYPE_ID   = mtys.MILCS_TYPE_ID
  AND   mtys.MILCS_CODE IN ('EMAIL_PROCESSING') /* Requeued segment removed for bug 5337716 */
  AND   mitm.media_id        = inv2.media_id
  AND   NOT EXISTS
   (
    SELECT /*+ use_hash(mseg1) use_hash(mtys1) */
         1
    FROM JTF_IH_MEDIA_ITEM_LC_SEGS   mseg1,
         JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys1
    WHERE  mseg.MEDIA_ID       = mseg1.MEDIA_ID
    AND    mseg1.MILCS_TYPE_ID = mtys1.MILCS_TYPE_ID
    AND    mtys1.MILCS_CODE  IN
             ('EMAIL_FETCH', 'EMAIL_RESOLVED', 'EMAIL_AUTO_REDIRECTED', 'EMAIL_AUTO_DELETED',
              'EMAIL_AUTO_REPLY', 'EMAIL_OPEN', 'EMAIL_AUTO_ROUTED', 'EMAIL_AUTO_UPDATED_SR',
              'EMAIL_ASSIGNED', 'EMAIL_ASSIGN_OPEN','EMAIL_DELETED')
--
--This condition is required since the email might have been fetched once but
--then re-queued.  In this case the email is still in QUEUE and wihout the following
--condition will miss the record
--
    AND    mseg1.START_DATE_TIME >= mseg.START_DATE_TIME
    AND    mseg1.START_DATE_TIME < g_collect_end_date
   )
  UNION
--
--This query is for emails which were in QUEUE for some time but are no longer in QUEUE
--
  SELECT /*+ use_hash(mitm2) use_hash(inv2) use_hash(inv1) use_hash(mseg2) use_hash(mtys2) use_hash(cls2) */
    mitm2.media_id                        MEDIA_ID,
    nvl(mitm2.source_id, -1)              EMAIL_ACCOUNT_ID,
    nvl(cls2.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
    nvl(inv1.party_id, -1)                PARTY_ID,
    mseg2.start_date_time                 START_DATE_TIME,
    min(inv2.start_date_time)              END_DATE_TIME,
    mitm2.start_date_time                 MEDIA_START_DATE_TIME,
    --1/2hr
    decode(sign(mseg2.start_date_time - g_collect_start_date), -1, g_collect_start_date,
             to_date(to_char(mseg2.start_date_time ,'YYYY/MM/DD ')|| '00:'
               || '00',
                 'YYYY/MM/DD HH24:MI'))   PERIOD_START_DATE_TIME,
    --1/2hr removed 1/2 hr lag in collect time
    decode(sign(g_collect_end_date - min(inv2.start_date_time)), -1, g_collect_end_date, -- - (( 29 * 60 + 59 )/(24*60*60))
           to_date(to_char(min(inv2.start_date_time) ,'YYYY/MM/DD ')|| '00:'
               || '00',
                 'YYYY/MM/DD HH24:MI'))   PERIOD_END_DATE_TIME
  FROM
    JTF_IH_MEDIA_ITEMS mitm2,
    (
        SELECT /*+ use_hash(mseg3) use_hash(mtys3) */
               mseg3.media_id,
               mseg3.resource_id,
               mseg3.start_date_time
        FROM   JTF_IH_MEDIA_ITEM_LC_SEGS   mseg3,
               JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys3
        WHERE  mseg3.MILCS_TYPE_ID = mtys3.MILCS_TYPE_ID
        AND    mtys3.MILCS_CODE  IN
                 ('EMAIL_FETCH', 'EMAIL_RESOLVED', 'EMAIL_AUTO_REDIRECTED', 'EMAIL_AUTO_DELETED',
                  'EMAIL_AUTO_REPLY', 'EMAIL_OPEN', 'EMAIL_AUTO_ROUTED', 'EMAIL_AUTO_UPDATED_SR',
                  'EMAIL_ASSIGNED', 'EMAIL_ASSIGN_OPEN','EMAIL_DELETED')
        AND    mseg3.START_DATE_TIME BETWEEN g_collect_start_date AND g_collect_end_date
    ) inv2,
    (
        --????Change for party_id
         --SELECT /*+ use_hash(actv) use_hash(intr) */
           --actv.media_id        media_id,
           --min(intr.party_id)   party_id
         --FROM
           --jtf_ih_activities actv,
           --jtf_ih_interactions intr
         --WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         --AND   actv.interaction_id = intr.interaction_id
         --GROUP BY actv.media_id
         SELECT /*+ use_hash(actv) use_hash(intr) */
           distinct actv.media_id        media_id,
           first_value(intr.party_id)
           over(partition by actv.media_id order by actv.interaction_id desc) party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
    ) inv1,
    JTF_IH_MEDIA_ITEM_LC_SEGS mseg2,
    JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys2,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) cls2
  WHERE mitm2.MEDIA_ITEM_TYPE = 'EMAIL'
  AND   mitm2.DIRECTION       = 'INBOUND'
  AND   mitm2.classification  = cls2.name(+)
  AND   mitm2.MEDIA_ID        = inv2.MEDIA_ID
  AND   inv2.MEDIA_ID          = mseg2.MEDIA_ID
  AND   mseg2.START_DATE_TIME < g_collect_end_date
  AND   mseg2.MILCS_TYPE_ID   = mtys2.MILCS_TYPE_ID
  AND   inv2.START_DATE_TIME   >= mseg2.START_DATE_TIME
  AND   mitm2.media_id        = inv1.media_id  --???test with outer join removed here
  AND   mtys2.MILCS_CODE IN ('EMAIL_PROCESSING')/* Requeued segment removed for bug 5337716 */
  GROUP BY
    mitm2.media_id,
    nvl(mitm2.source_id, -1),
    nvl(cls2.route_classification_id, -1),
    nvl(inv1.party_id, -1),
    mseg2.start_date_time,
    mitm2.start_date_time;
Line: 1781

  /* Again estimating statistics here as these rows will be updated by open and resolution measures */
  DBMS_STATS.gather_table_stats(ownname => g_bix_schema,
                                tabName => 'BIX_EMAIL_DETAILS_F',
                                cascade => TRUE,
                                degree => bis_common_parameters.get_degree_of_parallelism,
                                estimate_percent => 10,
                                granularity => 'GLOBAL');
Line: 1800

PROCEDURE update_open_measure (p_email_account_id IN OUT NOCOPY g_email_account_id_tab,
                               p_email_classification_id IN OUT NOCOPY g_email_classification_id_tab,
                               p_party_id IN OUT NOCOPY g_party_id_tab,
                               p_agent_id IN OUT NOCOPY g_resource_id_tab,
                               p_period_start_date IN OUT NOCOPY g_period_start_date_tab,
                               p_emails_open IN OUT NOCOPY g_emails_open_tab,
                               p_total_open_age IN OUT NOCOPY g_total_open_age_tab,
                               p_oldest_open_message IN OUT NOCOPY g_oldest_open_message_tab,
                               p_acc_emails_one_day IN OUT NOCOPY g_acc_emails_one_day_tab,
                               p_acc_emails_three_days IN OUT NOCOPY g_acc_emails_three_days_tab,
                               p_acc_emails_week IN OUT NOCOPY g_acc_emails_week_tab,
                               p_acc_emails_week_plus IN OUT NOCOPY g_acc_emails_week_plus_tab) IS
BEGIN

  write_log('Start of the procedure update_open_measure at ' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss'));
Line: 1816

  /* Update ICI summary table with open measure */
  FORALL i in p_email_account_id.FIRST .. p_email_account_id.LAST
  MERGE INTO bix_email_details_f bed
  USING (
    SELECT
      p_email_account_id(i) email_account_id,
      p_email_classification_id(i) email_classification_id,
      p_agent_id(i) agent_id,
      p_party_id(i) party_id,
      to_number(to_char(p_period_start_date(i), 'J')) time_id,
      --1/2hr changed period type id to 1 from -1
      1 period_type_id,
      trunc(p_period_start_date(i)) period_start_date,
      LPAD(TO_CHAR(p_period_start_date(i),'HH24:MI'), 5, '0') period_start_time,
      nvl(p_emails_open(i),0) accumulated_open_emails,
      nvl(p_total_open_age(i),0) accumulated_open_age,
      p_oldest_open_message(i) oldest_email_open_date,
      nvl(p_acc_emails_one_day(i),0) accumulated_emails_one_day,
      nvl(p_acc_emails_three_days(i),0) accumulated_emails_three_days,
      nvl(p_acc_emails_week(i),0) accumulated_emails_week,
      nvl(p_acc_emails_week_plus(i),0) accumulated_emails_week_plus
    FROM dual) change
  ON (bed.email_account_id = change.email_account_id
    AND bed.email_classification_id = change.email_classification_id
    AND bed.agent_id = change.agent_id
    AND bed.party_id = change.party_id
    AND bed.time_id = change.time_id
    AND bed.period_type_id = change.period_type_id
    AND bed.period_start_date = change.period_start_date
    AND bed.period_start_time = change.period_start_time
    AND bed.outcome_id = -1 AND bed.result_id = -1 AND bed.reason_id = -1 )
  WHEN MATCHED THEN
    UPDATE
    SET
      bed.accumulated_open_emails = decode(change.accumulated_open_emails, 0, bed.accumulated_open_emails,
                           NVL(bed.accumulated_open_emails, 0) + change.accumulated_open_emails),
      bed.accumulated_open_age = decode(change.accumulated_open_age, 0, bed.accumulated_open_age,
                           NVL(bed.accumulated_open_age, 0) + change.accumulated_open_age),
      bed.accumulated_emails_one_day = decode(change.accumulated_emails_one_day, 0, bed.accumulated_emails_one_day,
                           NVL(bed.accumulated_emails_one_day, 0) + change.accumulated_emails_one_day),
      bed.accumulated_emails_three_days = decode(change.accumulated_emails_three_days, 0, bed.accumulated_emails_three_days,
                           NVL(bed.accumulated_emails_three_days, 0) + change.accumulated_emails_three_days),
      bed.accumulated_emails_week = decode(change.accumulated_emails_week, 0, bed.accumulated_emails_week,
                           NVL(bed.accumulated_emails_week, 0) + change.accumulated_emails_week),
      bed.accumulated_emails_week_plus = decode(change.accumulated_emails_week_plus, 0, bed.accumulated_emails_week_plus,
                           NVL(bed.accumulated_emails_week_plus, 0) + change.accumulated_emails_week_plus),
      bed.oldest_email_open_date =
             DECODE(change.oldest_email_open_date,NULL,bed.oldest_email_open_date,
               DECODE(bed.oldest_email_open_date,NULL,change.oldest_email_open_date,
                 DECODE(SIGN(bed.oldest_email_open_date - change.oldest_email_open_date),
                    -1,bed.oldest_email_open_date, change.oldest_email_open_date))),
        bed.last_update_date =  g_sysdate,
        bed.last_updated_by = g_user_id
  WHEN NOT MATCHED THEN INSERT (
        bed.email_account_id,
        bed.email_classification_id,
        bed.agent_id,
        bed.party_id,
	   bed.outcome_id,
	   bed.result_id,
	   bed.reason_id,
        bed.time_id,
        bed.period_type_id,
        bed.period_start_date,
        bed.period_start_time,
        bed.created_by,
        bed.creation_date,
        bed.last_updated_by,
        bed.last_update_date,
        bed.accumulated_open_emails,
        bed.accumulated_open_age,
        bed.oldest_email_open_date,
        bed.accumulated_emails_one_day,
        bed.accumulated_emails_three_days,
        bed.accumulated_emails_week,
        bed.accumulated_emails_week_plus,
        bed.request_id,
        bed.program_application_id,
        bed.program_id,
        bed.program_update_date)
      VALUES (
        change.email_account_id,
        change.email_classification_id,
        change.agent_id,
        change.party_id,
	   -1,
	   -1,
	   -1,
        change.time_id,
        change.period_type_id,
        change.period_start_date,
        change.period_start_time,
        g_user_id,
        g_sysdate,
        g_user_id,
        g_sysdate,
        decode(change.accumulated_open_emails, 0, to_number(null), change.accumulated_open_emails),
        decode(change.accumulated_open_age, 0, to_number(null), change.accumulated_open_age),
        change.oldest_email_open_date,
        decode(change.accumulated_emails_one_day, 0, to_number(null), change.accumulated_emails_one_day),
        decode(change.accumulated_emails_three_days, 0, to_number(null), change.accumulated_emails_three_days),
        decode(change.accumulated_emails_week, 0, to_number(null), change.accumulated_emails_week),
        decode(change.accumulated_emails_week_plus, 0, to_number(null), change.accumulated_emails_week_plus),
        g_request_id,
        g_program_appl_id,
        g_program_id,
        g_sysdate);
Line: 1928

  write_log('Finished procedure update_open_measure at ' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss'));
Line: 1931

    write_log('Error in update_open_measure : Error : ' || sqlerrm);
Line: 1933

END update_open_measure;
Line: 1936

This splits the data to mutliple time buckets.  Then it calls update_open_measures
which does the actual MERGE of the data
*/
PROCEDURE process_open_measure_row(p_media_id IN OUT NOCOPY g_media_id_tab,
                                   p_email_account_id IN OUT NOCOPY g_email_account_id_tab,
                                   p_email_classification_id IN OUT NOCOPY g_email_classification_id_tab,
                                   p_resource_id IN OUT NOCOPY g_resource_id_tab,
                                   p_party_id IN OUT NOCOPY g_party_id_tab,
                                   p_start_date_time IN OUT NOCOPY g_start_date_time_tab,
                                   p_end_date_time IN OUT NOCOPY g_end_date_time_tab,
                                   p_media_start_date_time IN OUT NOCOPY g_media_start_date_time_tab,
                                   p_period_start_date_time IN OUT NOCOPY g_start_date_time_tab,
                                   p_period_end_date_time IN OUT NOCOPY g_end_date_time_tab) IS

  l_email_account_id g_email_account_id_tab;
Line: 2067

        update_open_measure (l_email_account_id,
                             l_email_classification_id,
                             l_party_id,
                             l_agent_id,
                             l_period_start_date,
                             l_emails_open,
                             l_total_open_age,
                             l_oldest_open_message,
                             l_acc_emails_one_day,
                             l_acc_emails_three_days,
                             l_acc_emails_week,
                             l_acc_emails_week_plus);
Line: 2106

    update_open_measure (l_email_account_id,
                         l_email_classification_id,
                         l_party_id,
                         l_agent_id,
                         l_period_start_date,
                         l_emails_open,
                         l_total_open_age,
                         l_oldest_open_message,
                         l_acc_emails_one_day,
                         l_acc_emails_three_days,
                         l_acc_emails_week,
                         l_acc_emails_week_plus);
Line: 2150

be inserted one for each day with accumulated_open_emails as 1 for both days.

================================================================================================*/

PROCEDURE collect_open_measures AS

  CURSOR open_measures IS
  SELECT /*+ use_hash(mitm) use_hash(mseg) use_hash(mtys) use_hash(cls) use_hash(inv2) */
    mitm.media_id                        MEDIA_ID,
    nvl(mitm.source_id, -1)              EMAIL_ACCOUNT_ID,
    nvl(cls.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
    nvl(mseg.resource_id,-1)             RESOURCE_ID,
    nvl(inv2.party_id, -1)                PARTY_ID,
    mseg.start_date_time                 START_DATE_TIME,
    g_collect_end_date                   END_DATE_TIME,
    mitm.start_date_time                 MEDIA_START_DATE_TIME,
    --1/2hr
    decode(sign(mseg.start_date_time - g_collect_start_date), -1, g_collect_start_date,
              to_date(to_char(mseg.start_date_time ,'YYYY/MM/DD ')|| '00:'
               || '00',
                 'YYYY/MM/DD HH24:MI')) PERIOD_START_DATE_TIME,
    --1/2hr
    g_collect_end_date
                                          PERIOD_END_DATE_TIME
  FROM
    JTF_IH_MEDIA_ITEMS mitm,
    JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
    JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) cls,
    (
        --???Changed for party
         --SELECT /*+ use_hash(actv) use_hash(intr) */
           --actv.media_id        media_id,
           --min(intr.party_id)   party_id
         --FROM
           --jtf_ih_activities actv,
           --jtf_ih_interactions intr
         --WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         --AND   actv.interaction_id = intr.interaction_id
         --GROUP BY actv.media_id
         SELECT /*+ use_hash(actv) use_hash(intr) */
           distinct actv.media_id        media_id,
           first_value(intr.party_id)
           over(partition by actv.media_id order by actv.interaction_id desc) party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
    ) inv2
  WHERE mitm.media_item_type = 'EMAIL'
  AND   mitm.direction = 'INBOUND'
  AND   mitm.classification = cls.name(+)
  AND   mitm.media_id = mseg.media_id
  AND   mseg.start_date_time < g_collect_end_date
  AND   mseg.milcs_type_id = mtys.milcs_type_id
  AND   mtys.milcs_code IN ('EMAIL_FETCH','EMAIL_TRANSFER', 'EMAIL_ASSIGN_OPEN', 'EMAIL_AUTO_ROUTED', 'EMAIL_ASSIGNED')
  AND   mitm.media_id = inv2.media_id --??? test with outer join removed here
  AND   NOT EXISTS
   (
    SELECT  /*+ use_hash(mseg1) use_hash(mtys1) */
      1
    FROM JTF_IH_MEDIA_ITEM_LC_SEGS mseg1,
         JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys1
    WHERE mseg.media_id = mseg1.media_id
--    AND   mseg.resource_id = mseg1.resource_id
 /* Commenting this join out because the supervisor can perform some of the operations below.
	 Irrespective of which user did it, the email is not open any more */
    AND   mseg1.milcs_type_id = mtys1.milcs_type_id
    AND   mtys1.milcs_code  IN ('EMAIL_REPLY','EMAIL_DELETED','EMAIL_TRANSFERRED', 'EMAIL_ESCALATED', 'EMAIL_REQUEUED',
                                'EMAIL_ASSIGNED','EMAIL_REROUTED_DIFF_ACCT', 'EMAIL_REROUTED_DIFF_CLASS')
    AND   mseg1.START_DATE_TIME >= mseg.START_DATE_TIME
    AND   mseg1.start_date_time < g_collect_end_date
    AND   mseg1.milcs_id <> mseg.milcs_id
   )
  UNION
  SELECT /*+ use_hash(mitm) use_hash(inv2) use_hash(inv1) use_hash(mseg) use_hash(mtys) use_hash(cls) */
    mitm.media_id                        MEDIA_ID,
    nvl(mitm.source_id, -1)              EMAIL_ACCOUNT_ID,
    nvl(cls.route_classification_id, -1) EMAIL_CLASSIFICATION_ID,
    nvl(mseg.resource_id, -1)            RESOURCE_ID,
    nvl(inv1.party_id, -1)               PARTY_ID,
    mseg.start_date_time                 START_DATE_TIME,
    min(inv2.start_date_time)             END_DATE_TIME,
    mitm.start_date_time                 MEDIA_START_DATE_TIME,
    --1/2hr
    decode(sign(mseg.start_date_time - g_collect_start_date), -1, g_collect_start_date,
             to_date(to_char(mseg.start_date_time ,'YYYY/MM/DD ')|| '00:'
               || '00',
                 'YYYY/MM/DD HH24:MI'))  PERIOD_START_DATE_TIME,
    decode(sign(g_collect_end_date - min(inv2.start_date_time)), -1, g_collect_end_date - (( 29 * 60 + 59 )/(24*60*60)),
             to_date(to_char(min(inv2.start_date_time) ,'YYYY/MM/DD ')|| '00:'
               || '00',
                'YYYY/MM/DD HH24:MI'))   PERIOD_END_DATE_TIME
  FROM
    JTF_IH_MEDIA_ITEMS mitm,
    (
        SELECT  /*+ use_hash(mseg1) use_hash(mtys1) */
                mseg1.media_id         MEDIA_ID,
                mseg1.resource_id      RESOURCE_ID,
                mseg1.start_date_time  START_DATE_TIME
        FROM    JTF_IH_MEDIA_ITEM_LC_SEGS mseg1,
                JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys1
        WHERE   mseg1.MILCS_TYPE_ID = mtys1.MILCS_TYPE_ID
        AND     mtys1.MILCS_CODE  IN ('EMAIL_REPLY','EMAIL_DELETED','EMAIL_TRANSFERRED', 'EMAIL_ESCALATED',
                   'EMAIL_ASSIGNED','EMAIL_REQUEUED', 'EMAIL_REROUTED_DIFF_ACCT', 'EMAIL_REROUTED_DIFF_CLASS')
        AND     mseg1.START_DATE_TIME BETWEEN g_collect_start_date AND  g_collect_end_date
    ) inv2,
    (
         --????Change for party_id
         --SELECT /*+ use_hash(actv) use_hash(intr) */
           --actv.media_id        media_id,
           --min(intr.party_id)   party_id
         --FROM
           --jtf_ih_activities actv,
           --jtf_ih_interactions intr
         --WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         --AND   actv.interaction_id = intr.interaction_id
         --GROUP BY actv.media_id
         SELECT /*+ use_hash(actv) use_hash(intr) */
           distinct actv.media_id        media_id,
           first_value(intr.party_id)
           over(partition by actv.media_id order by actv.interaction_id desc) party_id
         FROM
           jtf_ih_activities actv,
           jtf_ih_interactions intr
         WHERE actv.start_date_time BETWEEN g_collect_start_date AND g_collect_end_date
         AND   actv.interaction_id = intr.interaction_id
    ) inv1,
    JTF_IH_MEDIA_ITEM_LC_SEGS mseg,
    JTF_IH_MEDIA_ITM_LC_SEG_TYS mtys,
    --
    --Changes for R12
    --
    (
    select name, max(route_classification_id) route_classification_id
    from iem_route_classifications
    group by name
    ) cls
  WHERE  mitm.media_id = inv2.media_id
  AND    inv2.media_id = mseg.media_id
  -- AND    inv2.resource_id = mseg.resource_id
/* Commenting this join out because the supervisor  performs some  operations like delete and requeued.
	 Irrespective of which user did it, the email was not open. Lets say Email fetched by agent a, email transferred by a,
	 email transfer to b, email requeue to c. If we remove this condition, we anyways take min (inv2.start_date_time),
	 so a will get the email transferred start date time (done by him), b will get requeue start date time (done by c) */
  AND    mitm.media_item_type = 'EMAIL'
  AND    mitm.direction = 'INBOUND'
  AND    mitm.classification = cls.name(+)
  AND    mseg.start_date_time < g_collect_end_date
  AND    mseg.milcs_type_id = mtys.milcs_type_id
  AND    inv2.START_DATE_TIME >= mseg.START_DATE_TIME
  AND    mtys.milcs_code IN ('EMAIL_FETCH','EMAIL_TRANSFER', 'EMAIL_ASSIGN_OPEN', 'EMAIL_AUTO_ROUTED')
  AND    mitm.media_id = inv1.media_id --???test with outer join removed here
  GROUP BY
    mitm.media_id,
    nvl(mitm.source_id, -1),
    nvl(cls.route_classification_id, -1),
    nvl(mseg.resource_id, -1),
    nvl(inv1.party_id, -1),
    mseg.start_date_time,
    mitm.start_date_time;
Line: 2387

  /* Estimating statistics as these rows will be updated by resolution measures */
  DBMS_STATS.gather_table_stats(ownname => g_bix_schema,
                                tabName => 'BIX_EMAIL_DETAILS_F',
                                cascade => TRUE,
                                degree => bis_common_parameters.get_degree_of_parallelism,
                                estimate_percent => 10,
                                granularity => 'GLOBAL');
Line: 2473

  INSERT /*+ append */ INTO bix_email_details_f (
    agent_id,
    email_account_id,
    email_classification_id,
    party_id,
    time_id,
    period_type_id,
    period_start_date,
    period_start_time,
    outcome_id,
    result_id,
    reason_id,
    created_by,
    creation_date,
    last_updated_by,
    last_update_date,
    emails_offered_in_period,
    emails_fetched_in_period,
    emails_replied_in_period,
    emails_rpld_by_goal_in_period,
    AGENT_EMAILS_RPLD_BY_GOAL,
    emails_deleted_in_period,
    emails_trnsfrd_out_in_period,
    emails_trnsfrd_in_in_period,
    emails_rsl_and_trfd_in_period,
    emails_assigned_in_period,
    emails_auto_routed_in_period,
    emails_auto_uptd_sr_in_period,
    sr_created_in_period,
    oldest_email_open_date,
    oldest_email_queue_date,
    email_resp_time_in_period,
    agent_resp_time_in_period,
    accumulated_open_emails,
    accumulated_open_age,
    accumulated_emails_in_queue,
    accumulated_queue_time,
    accumulated_emails_one_day,
    accumulated_emails_three_days,
    accumulated_emails_week,
    accumulated_emails_week_plus,
    one_rsln_in_period,
    two_rsln_in_period,
    three_rsln_in_period,
    four_rsln_in_period,
    interaction_threads_in_period,
    emails_orr_count_in_period,
    EMAILS_AUTO_REPLIED_IN_PERIOD,
    EMAILS_AUTO_DELETED_IN_PERIOD,
    EMAILS_AUTO_RESOLVED_IN_PERIOD,
    emails_composed_in_period,
    emails_rerouted_in_period,
    leads_created_in_period,
    request_id,
    program_application_id,
    program_id,
    program_update_date )
  (SELECT
    rlp.agent_id                                     agent_id,
    rlp.email_account_id                             email_account_id,
    rlp.email_classification_id                      email_classification_id,
    rlp.party_id                                     party_id,
    rlp.time_id                                      time_id,
    rlp.period_type_id                               period_type_id,
    rlp.period_start_date                            period_start_date,
    rlp.period_start_time                            period_start_time,
    rlp.outcome_id                                   outcome_id,
    rlp.result_id                                    result_id,
    rlp.reason_id                                    reason_id,
    g_user_id                                        created_by,
    g_sysdate                                        creation_date,
    g_user_id                                        last_updated_by,
    g_sysdate                                        last_update_date,
    decode(sum(rlp.emails_offered_in_period), 0, to_number(null), sum(rlp.emails_offered_in_period))
                                                     emails_offered_in_period,
    decode(sum(rlp.emails_fetched_in_period), 0, to_number(null), sum(rlp.emails_fetched_in_period))
                                                     emails_fetched_in_period,
    decode(sum(rlp.emails_replied_in_period), 0, to_number(null), sum(rlp.emails_replied_in_period))
                                                     emails_replied_in_period,
    decode(sum(rlp.emails_rpld_by_goal_in_period), 0, to_number(null), sum(rlp.emails_rpld_by_goal_in_period))
                                                     emails_rpld_by_goal_in_period,
    decode(sum(rlp.AGENT_EMAILS_RPLD_BY_GOAL), 0, to_number(null), sum(rlp.AGENT_EMAILS_RPLD_BY_GOAL))
                                                         AGENT_EMAILS_RPLD_BY_GOAL,
    decode(sum(rlp.emails_deleted_in_period), 0, to_number(null), sum(rlp.emails_deleted_in_period))
                                                     emails_deleted_in_period,
    decode(sum(rlp.emails_trnsfrd_out_in_period), 0, to_number(null), sum(rlp.emails_trnsfrd_out_in_period))
                                                     emails_trnsfrd_out_in_period,
    decode(sum(rlp.emails_trnsfrd_in_in_period), 0, to_number(null), sum(rlp.emails_trnsfrd_in_in_period))
                                                     emails_trnsfrd_in_in_period,
    decode(sum(rlp.emails_rsl_and_trfd_in_period), 0, to_number(null), sum(rlp.emails_rsl_and_trfd_in_period))
                                                     emails_rsl_and_trfd_in_period,
    decode(sum(rlp.emails_assigned_in_period), 0, to_number(null), sum(rlp.emails_assigned_in_period))
                                                     emails_assigned_in_period,
    decode(sum(rlp.emails_auto_routed_in_period), 0, to_number(null), sum(rlp.emails_auto_routed_in_period))
                                                     emails_auto_routed_in_period,
    decode(sum(rlp.emails_auto_uptd_sr_in_period), 0, to_number(null), sum(rlp.emails_auto_uptd_sr_in_period))
                                                     emails_auto_uptd_sr_in_period,
    decode(sum(rlp.sr_created_in_period), 0, to_number(null), sum(rlp.sr_created_in_period))
                                                     sr_created_in_period,
    min(rlp.oldest_email_open_date)                  oldest_email_open_date,
    min(rlp.oldest_email_queue_date)                 oldest_email_queue_date,
    decode(sum(rlp.email_resp_time_in_period), 0, to_number(null), sum(rlp.email_resp_time_in_period))
                                                     email_resp_time_in_period,
    decode(sum(rlp.agent_resp_time_in_period), 0, to_number(null), sum(rlp.agent_resp_time_in_period))
                                                     agent_resp_time_in_period,
    min(rlp.acc_open_emails)                         acc_open_emails,
    min(rlp.acc_open_age)                            acc_open_age,
    min(rlp.acc_emails_in_queue)                     acc_emails_in_queue,
    min(rlp.acc_queue_time)                          acc_queue_time,
    min(rlp.acc_emails_one_day)                      acc_emails_one_day,
    min(rlp.acc_emails_three_days)                   acc_emails_three_days,
    min(rlp.acc_emails_week)                         acc_emails_week,
    min(rlp.acc_emails_week_plus)                    acc_emails_week_plus,
    decode(sum(rlp.one_rsln_in_period), 0, to_number(null), sum(rlp.one_rsln_in_period))
                                                     one_rsln_in_period,
    decode(sum(rlp.two_rsln_in_period), 0, to_number(null), sum(rlp.two_rsln_in_period))
                                                     two_rsln_in_period,
    decode(sum(rlp.three_rsln_in_period), 0, to_number(null), sum(rlp.three_rsln_in_period))
                                                     three_rsln_in_period,
    decode(sum(rlp.four_rsln_in_period), 0, to_number(null), sum(rlp.four_rsln_in_period))
                                                     four_rsln_in_period,
    decode(sum(rlp.interaction_threads_in_period), 0, to_number(null), sum(rlp.interaction_threads_in_period))
                                                     interaction_threads_in_period,
    decode(sum(rlp.emails_orr_count_in_period),0,to_number(null),sum(emails_orr_count_in_period)) emails_orr_count_in_period,
    decode(sum(rlp.EMAILS_AUTO_REPLIED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_REPLIED_IN_PERIOD)) EMAILS_AUTO_REPLIED_IN_PERIOD,
    decode(sum(rlp.EMAILS_AUTO_DELETED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_DELETED_IN_PERIOD)) EMAILS_AUTO_DELETED_IN_PERIOD,
    decode(sum(rlp.EMAILS_AUTO_RESOLVED_IN_PERIOD),0,to_number(null),sum(EMAILS_AUTO_RESOLVED_IN_PERIOD)) EMAILS_AUTO_RESOLVED_IN_PERIOD,
    decode(sum(rlp.emails_composed_in_period),0,to_number(null),sum(emails_composed_in_period)) emails_composed_in_period,
    decode(sum(rlp.EMAILS_REROUTED_IN_PERIOD),0,to_number(null),sum(EMAILS_REROUTED_IN_PERIOD)) EMAILS_REROUTED_IN_PERIOD,
    decode(sum(rlp.leads_created_in_period),0,to_number(null),sum(leads_created_in_period)) leads_created_in_period,
    g_request_id                                     request_id,
    g_program_appl_id                                program_application_id,
    g_program_id                                     program_id,
    g_sysdate                                        program_update_date
  FROM (
    SELECT
      inv2.agent_id agent_id,
      inv2.email_account_id email_account_id,
      inv2.email_classification_id email_classification_id,
      inv2.party_id party_id,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), inv2.ent_year_id),
              inv2.ent_qtr_id), inv2.ent_period_id), inv2.week_id) time_id,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null),
              128), 64), 32), 16) period_type_id,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_date(null), min(inv2.ent_year_start_date)),
              min(inv2.ent_qtr_start_date)), min(inv2.ent_period_start_date)), min(inv2.week_start_date))
                   period_start_date,
      '00:00' period_start_time,
	 inv2.outcome_id,
	 inv2.result_id,
	 inv2.reason_id,
      sum(inv2.emails_offered_in_period) emails_offered_in_period,
      sum(inv2.emails_fetched_in_period) emails_fetched_in_period,
      sum(inv2.emails_replied_in_period) emails_replied_in_period,
      sum(inv2.emails_rpld_by_goal_in_period) emails_rpld_by_goal_in_period,
      sum(inv2.AGENT_EMAILS_RPLD_BY_GOAL) AGENT_EMAILS_RPLD_BY_GOAL,
      sum(inv2.emails_deleted_in_period) emails_deleted_in_period,
      sum(inv2.emails_trnsfrd_out_in_period) emails_trnsfrd_out_in_period,
      sum(inv2.emails_trnsfrd_in_in_period) emails_trnsfrd_in_in_period,
      sum(inv2.emails_rsl_and_trfd_in_period) emails_rsl_and_trfd_in_period,
      sum(inv2.emails_assigned_in_period) emails_assigned_in_period,
      sum(inv2.emails_auto_routed_in_period) emails_auto_routed_in_period,
      sum(inv2.emails_auto_uptd_sr_in_period) emails_auto_uptd_sr_in_period,
      sum(inv2.sr_created_in_period) sr_created_in_period,
      to_date(null) oldest_email_open_date,
      to_date(null) oldest_email_queue_date,
      sum(inv2.email_resp_time_in_period) email_resp_time_in_period,
      sum(inv2.agent_resp_time_in_period) agent_resp_time_in_period,
      sum(inv2.one_rsln_in_period) one_rsln_in_period,
      sum(inv2.two_rsln_in_period) two_rsln_in_period,
      sum(inv2.three_rsln_in_period) three_rsln_in_period,
      sum(inv2.four_rsln_in_period) four_rsln_in_period,
      sum(inv2.interaction_threads_in_period) interaction_threads_in_period,
      sum(inv2.emails_orr_count_in_period) emails_orr_count_in_period,
      sum(inv2.EMAILS_AUTO_REPLIED_IN_PERIOD) EMAILS_AUTO_REPLIED_IN_PERIOD,
      sum(inv2.EMAILS_AUTO_DELETED_IN_PERIOD) EMAILS_AUTO_DELETED_IN_PERIOD,
      sum(inv2.EMAILS_AUTO_RESOLVED_IN_PERIOD) EMAILS_AUTO_RESOLVED_IN_PERIOD,
      sum(inv2.emails_composed_in_period) emails_composed_in_period,
      sum(inv2.emails_rerouted_in_period) emails_rerouted_in_period,
      sum(inv2.leads_created_in_period) leads_created_in_period,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_open_emails)),
              min(inv2.qtr_acc_open_emails)), min(inv2.period_acc_open_emails)), min(inv2.week_acc_open_emails))
                                                                       acc_open_emails,
      to_number(null)                                                                                acc_open_age,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_in_queue)),
              min(inv2.qtr_acc_emails_in_queue)), min(inv2.period_acc_emails_in_queue)), min(inv2.week_acc_emails_in_queue))
                                                                  acc_emails_in_queue,
      to_number(null)                                                                                acc_queue_time,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_one_day)),
              min(inv2.qtr_acc_emails_one_day)), min(inv2.period_acc_emails_one_day)), min(inv2.week_acc_emails_one_day))
                                                                    acc_emails_one_day,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_three_days)),
              min(inv2.qtr_acc_emails_three_days)), min(inv2.period_acc_emails_three_days)),
                min(inv2.week_acc_emails_three_days))            acc_emails_three_days,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_week)),
              min(inv2.qtr_acc_emails_week)), min(inv2.period_acc_emails_week)), min(inv2.week_acc_emails_week))
                                                                      acc_emails_week,
      decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
          decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null), min(inv2.year_acc_emails_week_plus)),
              min(inv2.qtr_acc_emails_week_plus)), min(inv2.period_acc_emails_week_plus)),
                min(inv2.week_acc_emails_week_plus))              acc_emails_week_plus
    FROM
      (SELECT /*+ use_hash(bed) use_hash(ftd) */
         bed.agent_id agent_id,
         bed.email_account_id email_account_id,
         bed.email_classification_id email_classification_id,
         bed.party_id party_id,
	    bed.outcome_id,
	    bed.result_id,
	    bed.reason_id,
         ftd.ent_year_id ent_year_id,
         ftd.ent_year_start_date ent_year_start_date,
         ftd.ent_qtr_id ent_qtr_id,
         ftd.ent_qtr_start_date ent_qtr_start_date,
         ftd.ent_period_id ent_period_id,
         ftd.ent_period_start_date ent_period_start_date,
         ftd.week_id  week_id,
         ftd.week_start_date week_start_date,
         ftd.report_date_julian report_date_julian,
         bed.period_start_date period_start_date,
         bed.emails_offered_in_period emails_offered_in_period,
         bed.emails_fetched_in_period emails_fetched_in_period,
         bed.emails_replied_in_period emails_replied_in_period,
         bed.emails_rpld_by_goal_in_period emails_rpld_by_goal_in_period,
         bed.AGENT_EMAILS_RPLD_BY_GOAL AGENT_EMAILS_RPLD_BY_GOAL,
         bed.emails_deleted_in_period emails_deleted_in_period,
         bed.emails_trnsfrd_out_in_period emails_trnsfrd_out_in_period,
         bed.emails_trnsfrd_in_in_period emails_trnsfrd_in_in_period,
         bed.emails_rsl_and_trfd_in_period emails_rsl_and_trfd_in_period,
         bed.emails_assigned_in_period emails_assigned_in_period,
         bed.emails_auto_routed_in_period emails_auto_routed_in_period,
         bed.emails_auto_uptd_sr_in_period emails_auto_uptd_sr_in_period,
         bed.sr_created_in_period sr_created_in_period,
         bed.email_resp_time_in_period email_resp_time_in_period,
         bed.agent_resp_time_in_period agent_resp_time_in_period,
         bed.one_rsln_in_period one_rsln_in_period,
         bed.two_rsln_in_period two_rsln_in_period,
         bed.three_rsln_in_period three_rsln_in_period,
         bed.four_rsln_in_period four_rsln_in_period,
         bed.interaction_threads_in_period interaction_threads_in_period,
	    bed.emails_orr_count_in_period emails_orr_count_in_period,
	    bed.EMAILS_AUTO_REPLIED_IN_PERIOD EMAILS_AUTO_REPLIED_IN_PERIOD,
	    bed.EMAILS_AUTO_DELETED_IN_PERIOD EMAILS_AUTO_DELETED_IN_PERIOD,
	    bed.EMAILS_AUTO_RESOLVED_IN_PERIOD EMAILS_AUTO_RESOLVED_IN_PERIOD,
	    bed.emails_composed_in_period emails_composed_in_period,
	    bed.emails_rerouted_in_period emails_rerouted_in_period,
	    bed.leads_created_in_period leads_created_in_period,
	    --1/2hr removing day measures since they have already been done
        -- first_value(bed.accumulated_open_emails)
        --   over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
        --         ftd.report_date_julian
        --           order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
        --             lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) day_acc_open_emails,
         first_value(bed.accumulated_open_emails)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.week_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_open_emails,
         first_value(bed.accumulated_open_emails)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_period_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_open_emails,
         first_value(bed.accumulated_open_emails)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_qtr_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_open_emails,
         first_value(bed.accumulated_open_emails)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_year_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_open_emails,
	    --1/2hr removing day measures since they have already been done
         --first_value(bed.accumulated_emails_in_queue)
         --  over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
         --        ftd.report_date_julian
         --          order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
         --            lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) day_acc_emails_in_queue,
         first_value(bed.accumulated_emails_in_queue)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.week_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_in_queue,
         first_value(bed.accumulated_emails_in_queue)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_period_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_in_queue,
         first_value(bed.accumulated_emails_in_queue)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_qtr_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_in_queue,
         first_value(bed.accumulated_emails_in_queue)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_year_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_in_queue,
	    --1/2hr removing day measures since they have already been done
        -- first_value(bed.accumulated_emails_one_day)
        --   over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
        --         ftd.report_date_julian
        --           order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
        --             lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) day_acc_emails_one_day,
         first_value(bed.accumulated_emails_one_day)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.week_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_one_day,
         first_value(bed.accumulated_emails_one_day)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_period_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                      lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_one_day,
         first_value(bed.accumulated_emails_one_day)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_qtr_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_one_day,
         first_value(bed.accumulated_emails_one_day)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_year_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_one_day,
	    --1/2hr removing day measures since they have already been done
         --first_value(bed.accumulated_emails_three_days)
         --  over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
         --        ftd.report_date_julian
         --          order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
         --            lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) day_acc_emails_three_days,
         first_value(bed.accumulated_emails_three_days)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.week_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_three_days,
         first_value(bed.accumulated_emails_three_days)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_period_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_three_days,
         first_value(bed.accumulated_emails_three_days)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_qtr_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_three_days,
         first_value(bed.accumulated_emails_three_days)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_year_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_three_days,
	    --1/2hr removing day measures since they have already been done
         --first_value(bed.accumulated_emails_week)
        --   over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
        --         ftd.report_date_julian
        --           order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
        --             lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) day_acc_emails_week,
         first_value(bed.accumulated_emails_week)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.week_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_week,
         first_value(bed.accumulated_emails_week)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_period_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_week,
         first_value(bed.accumulated_emails_week)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_qtr_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_week,
         first_value(bed.accumulated_emails_week)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_year_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_week,
	    --1/2hr removing day measures since they have already been done
         --first_value(bed.accumulated_emails_week_plus)
         --  over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
         --        ftd.report_date_julian
         --          order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
         --            lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) day_acc_emails_week_plus,
         first_value(bed.accumulated_emails_week_plus)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.week_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) week_acc_emails_week_plus,
         first_value(bed.accumulated_emails_week_plus)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_period_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) period_acc_emails_week_plus,
         first_value(bed.accumulated_emails_week_plus)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_qtr_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) qtr_acc_emails_week_plus,
         first_value(bed.accumulated_emails_week_plus)
           over (partition by bed.agent_id, bed.email_account_id, bed.email_classification_id, bed.party_id,
		 outcome_id, result_id, reason_id,
                 ftd.ent_year_id
                   order by to_date(to_char(bed.period_start_date, 'dd/mm/yyyy ') ||
                     lpad(bed.period_start_time, 5, '0'), 'dd/mm/yyyy hh24:mi') desc) year_acc_emails_week_plus
       FROM bix_email_details_f bed,
            fii_time_day ftd
       WHERE bed.time_id = ftd.report_date_julian
       --1/2hr changed period_Type_id to 1 from -1
       --AND   bed.period_type_id = -1) inv2
       AND   bed.period_type_id = 1) inv2
    GROUP BY
         inv2.agent_id,
         inv2.email_account_id,
         inv2.email_classification_id,
         inv2.party_id,
	    inv2.outcome_id,
	    inv2.result_id,
	    inv2.reason_id,
    ROLLUP(
         inv2.ent_year_id,
         inv2.ent_qtr_id,
         inv2.ent_period_id,
         inv2.week_id)
    HAVING
         decode(inv2.week_id, null, decode(inv2.ent_period_id, null,
                  decode(inv2.ent_qtr_id, null, decode(inv2.ent_year_id, null, to_number(null),
                         128), 64), 32), 16) IS NOT NULL) rlp
  GROUP BY
    rlp.agent_id,
    rlp.email_account_id,
    rlp.email_classification_id,
    rlp.party_id,
    rlp.time_id,
    rlp.period_type_id,
    rlp.period_start_date,
    rlp.period_start_time,
    rlp.outcome_id,
    rlp.result_id,
    rlp.reason_id);
Line: 2965

  SELECT count(*)
  INTO   l_count1
  FROM   fii_time_day
  WHERE  report_date between trunc(p_start_date) and trunc(p_end_date);
Line: 2970

  SELECT (trunc(p_end_date) - trunc(p_start_date)) + 1
  INTO   l_count2
  FROM   dual;
Line: 3035

  write_log('Total Rows Inserted/Updated : ' || to_char(g_rows_ins_upd));
Line: 3044

  /* Insert the status into collect log table */
  write_log('Calling procedure WRAPUP');
Line: 3098

  SELECT
    TO_DATE(TO_CHAR(l_start_date,'YYYY/MM/DD') || ' ' ||
                        LPAD(TO_CHAR(l_start_date,'HH24:'),3,'0') ||
                           DECODE(SIGN(TO_NUMBER(TO_CHAR(l_start_date,'MI'))-29),0,'00:00',1,'30:00',-1,'00:00'),
                              'YYYY/MM/DD HH24:MI:SS')
  INTO
    l_start_date
  FROM DUAL;
Line: 3112

  SELECT
    TO_DATE(TO_CHAR(l_end_date,'YYYY/MM/DD') || ' ' ||
                        LPAD(TO_CHAR(l_end_date,'HH24:'),3,'0') ||
                           DECODE(SIGN(TO_NUMBER(TO_CHAR(l_end_date,'MI'))-29),0,'00:00',1,'30:00',-1,'00:00'),
                              'YYYY/MM/DD HH24:MI:SS') - 1/86400
  INTO
    l_end_date
  FROM DUAL;