Почему ежедневная работа выполняется несколько раз - PullRequest
0 голосов
/ 01 июня 2018

Я создал процедуру отправки уведомления о доставке по электронной почте.Он проверит заказ на поставку, который должен быть доставлен сегодня, и отправит список товаров соответствующему персоналу.Я также создал задание, чтобы запускать его ежедневно в 17:00.Поэтому я предполагаю, что он должен отправлять электронную почту один раз в день.Но на самом деле я всегда получаю 6-7 писем в день, а время получения писем с 13:00 до 16:00.Понятия не имею, в чем проблема?Где мне искать причину?Это проблема SQL или проблема установки Oracle?Мы использовали базу данных Oracle 11g.Любая помощь приветствуется.Спасибо.

Процедура SQL :

CREATE OR REPLACE PROCEDURE SP_PO_INFO IS
  /******************************************************************************
     NAME:       SP_PRList_Assign
     REVISIONS:
     Ver        Date        Author               Description
     ---------  ----------  ---------------     ------------------------------------
     1.0        2011-09-08  Terry Sun            PR First assign Inform
  ******************************************************************************/
  TYPE M_VAR IS VARRAY(500) OF VARCHAR2(2000);
  M_BODY       M_VAR := M_VAR();
  L_OFFSET     NUMBER;
  M_SQLERRM    VARCHAR2(300);
  CONN         UTL_SMTP.CONNECTION;
  MAILSUBJECT  VARCHAR2(3000);
  MAILBODY     VARCHAR2(32767);
  MAIL_TO_REC  VARCHAR2(2000);
  MAIL_CC_REC  VARCHAR2(2000);
  MAIL_BCC_REC VARCHAR2(2000);
  L_CNT        INTEGER;
  L_TOTAL      INTEGER;

  --PR confirm completed no assign list
  CURSOR PO_INFO IS
    SELECT distinct TO_CHAR(PMN33, 'yyyy-mm-dd') PMN33,
       PMK12,

       GEN02,
       GEN06,
       PMN01,
       PMN04,
       PMN041,
       PMN07,
       PMN20,
       PMN24,
       PMMUD02
      FROM ZING.PMN_FILE, ZING.PMM_FILE,ZING.PMK_FILE, ZING.GEN_FILE, ZING.GEM_FILE
     WHERE PMN01 = PMM01
       AND PMN24 = PMK01
       AND PMK25 = '2'
       AND PMK12 = GEN01(+)
       and TO_CHAR(PMN33, 'yyyy-mm-dd')= TO_CHAR(SYSDATE, 'yyyy-mm-dd')
       and pmm25='2' ;

  --REceive E-mail Address
  CURSOR MAIL_ADD IS
   SELECT distinct TO_CHAR(PMN33, 'yyyy-mm-dd') PMN33,gen01,
       GEN02,
       GEN06
     FROM ZING.PMN_FILE, ZING.PMK_FILE, ZING.GEN_FILE, ZING.GEM_FILE
     WHERE PMN24 = PMK01
       AND PMK25 = '2'
       AND PMK12 = GEN01(+)
       and TO_CHAR(PMN33, 'yyyy-mm-dd')= TO_CHAR(SYSDATE, 'yyyy-mm-dd');

BEGIN
  ----------Total not assign PR---------------------------------
  SELECT COUNT(*)
    INTO L_TOTAL
    FROM ZING.PMM_FILE, ZING.PMN_FILE
   WHERE PMM01 = PMN01
     AND PMM18 = 'Y'
     AND PMM25 = '2'
     AND TO_CHAR(PMN33, 'yyyy-mm-dd')= TO_CHAR(SYSDATE, 'yyyy-mm-dd')
   ORDER BY PMM01, PMM02;

  -- if no information or the date in ('saturday','sunday') not send mail

  IF L_TOTAL = 0 OR TO_CHAR(SYSDATE, 'd') = '1' OR
     TO_CHAR(SYSDATE, 'd') = '7' THEN
    RETURN;
  ELSE
    FOR Y IN MAIL_ADD LOOP
    -- MAIL Subject
    MAILSUBJECT := 'ERP alarm';
    MAILBODY    := '<BR>' || 'Dear All :' || '<BR><BR>';
    MAILBODY    := MAILBODY || 'inventory will arrive today' ||'<BR>';
    MAILBODY    := MAILBODY || '<TABLE BORDER=1 CELLSPACING=0><TR>';

    -- lable column
  MAILBODY := MAILBODY || '<TD ALIGN=CENTER  BGCOLOR=C0C0C0>' || 'Item' ||
                '</TD>';
  MAILBODY := MAILBODY || '<TD ALIGN=CENTER  BGCOLOR=C0C0C0>' || 'Amount' ||
                '</TD>';
  MAILBODY := MAILBODY || '<TD ALIGN=CENTER BGCOLOR=C0C0C0>' || 'Date' ||
                '</TD></TR>'|| UTL_TCP.CRLF;

    L_CNT := 0;

  FOR X IN PO_INFO LOOP
  if    (x.pmk12=y.gen01) then
      M_BODY.EXTEND;
      L_CNT := L_CNT + 1;
      M_BODY(L_CNT) := '<TR><TD>' || X.PMN24 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMN01 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMN33 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMK12 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.GEN02 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMN04 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMN041 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMN07 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' || X.PMN20 || '</TD>';
      M_BODY(L_CNT) := M_BODY(L_CNT) || '<TD>' ||
                       X.PMMUD02 || '</TD></TR>   ' || UTL_TCP.CRLF;
    end if;
    END LOOP;    

    -- last page
    M_BODY.EXTEND;
    L_CNT := L_CNT + 1;
    M_BODY(L_CNT) := '   </TABLE>' || UTL_TCP.CRLF;



  -- MAIL CONTENT
  CONN := UTL_SMTP.OPEN_CONNECTION('10.10.22.26', 25);
  UTL_SMTP.HELO(CONN, '10.10.22.26');
  UTL_SMTP.MAIL(CONN, 'ricky.luo@zitest.com');

  MAIL_BCC_REC := '';
  UTL_SMTP.RCPT(CONN, Y.GEN06);
  MAIL_BCC_REC := MAIL_BCC_REC || 'ricky.luo@zitest.com' || ',';
  MAIL_CC_REC :=  '';
  UTL_SMTP.OPEN_DATA(CONN);
  --      UTL_SMTP.WRITE_DATA(CONN, 'Date:' || TO_CHAR( SYSDATE, 'yyyy/mm/dd hh24:mi:ss' ) || utl_tcp.CRLF);   --This date will result in send mail time err!
  UTL_SMTP.WRITE_DATA(CONN,
                      'From:' || 'IT <ERP Administrator>' || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(CONN,
                      'Subject: ' ||
                      UTL_ENCODE.MIMEHEADER_ENCODE(CONVERT(MAILSUBJECT,
                                                           'AL32UTF8')) ||
                      UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(CONN, 'TO: ' ||Y.GEN02 || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(CONN, 'CC: ' || MAIL_CC_REC || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(CONN, 'BCC: ' || MAIL_BCC_REC || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(CONN, 'MIME-VERSION: 1.0' || UTL_TCP.CRLF);
  UTL_SMTP.WRITE_DATA(CONN,
                      'CONTENT-TYPE: TEXT/HTML;CHARSET=AL32UTF8;' ||
                      UTL_TCP.CRLF);

  UTL_SMTP.WRITE_RAW_DATA(CONN,
                          UTL_RAW.CAST_TO_RAW('' || UTL_TCP.CRLF ||
                                              MAILBODY));
  FOR L_OFFSET IN 1 .. L_CNT LOOP
    UTL_SMTP.WRITE_RAW_DATA(CONN,
                            UTL_RAW.CAST_TO_RAW('' || UTL_TCP.CRLF ||
                                                M_BODY(L_OFFSET)));
  END LOOP;

  UTL_SMTP.CLOSE_DATA(CONN);
  UTL_SMTP.QUIT(CONN);
  END loop;
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    M_SQLERRM := SQLERRM;
    RAISE_APPLICATION_ERROR(-20001, M_SQLERRM);
    RAISE;
END;

Задание:

begin
  sys.dbms_job.submit(job => :job,
                      what => 'SP_PO_INFO;',
                      next_date => to_date('02-06-2018 06:56:13', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1');
  commit;
end;

/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...