Je cherche à mettre à jour le calendrier pointe automatiquement chaque minute en utilisant une procédure

voix
0

Ce code est une procédure pour mettre à jour la tâche à chaque fois un changement de travail passe est prévu et le déplacer vers un autre poste de travail et se termine que lorsque la tâche est fermée. Le prévu pour le travail de quart de travail de cette façon:

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

Mais le problème que je l'avoir ce code est la partie de DBMS_SCHEDULER, je tente de mettre à jour le calendrier Apex il met à jour chaque minute mais seulement des mises à jour quand je lance la première fois, mais lorsque je tente de lancer une deuxième fois, il donne cette erreur:

ORA-27477: GERAL.TURNOS8 existe déjà

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;
Créé 27/11/2018 à 15:09
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Il ne fait pas de sens de créer un emploi à chaque fois que vous exécutez ce morceau PL / SQL de code. C'est ce que vous essayez de faire actuellement:

procédure> crée un emploi> appelle la même procédure> crée le même travail> appelle la même procédure> crée le même travail ...

Vous devriez:

  • créer la procédure ( check_task_turnos)
    • ne créent pas un emploi dans!
  • séparément, créez un emploi et planifier son exécution à chaque minute
    • il appellera la check_task_turnosprocédure, mais il ne sera pas la création de la tâche tout recommencer ( d' ailleurs, comme vous l' avez vu, il ne fonctionnera pas)
Créé 27/11/2018 à 20:23
source utilisateur

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