Я пытаюсь автоматически обновлять апекс календарь каждую минуту с помощью процедуры

голоса
0

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

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;
Задан 27/11/2018 в 15:09
источник пользователем
На других языках...                            


1 ответов

голоса
0

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

Процедура> создает работу> вызывает та же процедура> создает ту же самую работу> вызывает та же процедура> создает ту же работу ...

Вам следует:

  • создать процедуру ( check_task_turnos)
    • не создают работу внутри!
  • отдельно, создать задание и запланировать его запустить каждую минуту
    • он будет вызывать check_task_turnosпроцедуру, но это не будет создавать работу заново ( к тому же , как вы видели, он просто не будет работать)
Ответил 27/11/2018 в 20:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more