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

Этот код является процедурой обновления задачи каждый раз, когда запланирована рабочая смена, и перемещения ее в другую рабочую смену, которая заканчивается только после закрытия задачи.Запланированная на рабочую смену работа следующим образом:

1º:  7:00 to 15:00
2º: 15:00 to 23:00
3º: 23:00 to  7:00

Но у меня проблема с этим кодом - это часть DBMS_SCHEDULER, я пытаюсь обновить календарь Apex, чтобы он обновлялся каждую минуту, но только обновлениякогда я запускаю в первый раз, но когда я пытаюсь запустить во второй раз, выдается следующее сообщение:

ORA-27477: "GERAL.TURNOS8" уже существует

create or replace PROCEDURE                                                  
       check_task_turnos AS
CURSOR c_turnos
IS
SELECT TIPO,ID,estado,calendar_start,calendar_end
,Case
WHEN  to_number(to_char(calendar_start,'HH24')) >= 7 AND to_number(to_char(calendar_end,'HH24')) < 15    

                 THEN 'apex-cal-yellow' 
                when to_number(to_char(calendar_start,'HH24')) >= 15 AND to_number(to_char(calendar_end,'HH24')) < 23    

                 THEN 'apex-cal-yellow' 
                 when (to_number(to_char(calendar_start,'HH24')) >= 23  AND to_number(to_char(calendar_end,'HH24')) < 24
                     OR
                     to_number(to_char(calendar_start,'HH24')) >= 0   AND to_number(to_char(calendar_end,'HH24')) <= 7)
                     THEN 'apex-cal-yellow' 
                 else null
                 end
FROM NVG_PASSAGEMTURNO
WHERE TIPO='To Do'
AND estado='Aceite';
BEGIN
FOR i IN c_turnos
      LOOP
    -- This table is for register reference that the task as changed the star time and end time
                INSERT INTO NVG_REGISTAR_PASSAGEM(passagem_id,
                                        start_date,
                                        end_date   
                                        )
                                VALUES(i.id ,  
                              i.calendar_start+(8/24) ,
                                    i.calendar_end+(8/24));
             -- update of start time and end time for updating the apex calendar
                UPDATE NVG_PASSAGEMTURNO
                SET  calendar_start =  i.calendar_start+(8/24)
                    , calendar_end   = i.calendar_end+(8/24)
                WHERE ID = i.ID;
                            END LOOP;
BEGIN
    DBMS_SCHEDULER.CREATE_JOB(
        job_name => 'turnos8',
        job_type => 'PLSQL_BLOCK',
        job_action => 'BEGIN
PKG_TURNOS.check_task_turnos;
END;',
        number_of_arguments => 0,
        start_date => TO_TIMESTAMP_TZ('2018-11-08 12:44:10.000000000 EUROPE/LONDON','YYYY-MM-DD HH24:MI:SS.FF TZR'),
        repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
        end_date => NULL,
        enabled => TRUE,
        auto_drop => FALSE,
        comments => '');
        END;            
end;

1 Ответ

0 голосов
/ 27 ноября 2018

Нет смысла создавать задание каждый раз, когда вы запускаете этот фрагмент кода PL / SQL.Вот что вы сейчас пытаетесь сделать:

процедура> создает задание> вызывает ту же процедуру> создает то же задание> вызывает ту же процедуру> создает то же задание ...

Вы должны:

  • создать процедуру (check_task_turnos)
    • не создавать работу в!
  • отдельно, создайте задание и запланируйте его выполнение каждую минуту
    • это вызовет процедуру check_task_turnos, но оно не будет создавать задание заново (кроме того, как вы видели, онопросто не сработает)
...