Je souhaite créer un travail qui supprimerait un objet de base de données à une date donnée. Le travail a bien été créé mais la procédure n'est pas exécutée. Essayé d'exécuter la procédure seule et cela fonctionne.Comment exécuter une procédure avec la procédure DBMS_SCHEDULER.CREATE_JOB
Voici le code pour le créer travail
v_jobnam := v_objnam;
v_jobnam := DBMS_SCHEDULER.generate_job_name (v_jobnam);
v_startdate := to_timestamp(v_startdate);
select sysdate + (v_delhrs/1440)
into v_startdate
from dual;
DBMS_SCHEDULER.CREATE_JOB(job_name => v_jobnam, job_type => 'PLSQL_BLOCK', JOB_ACTION => 'BEGIN DROP_OBJ1(' || v_objnam|| ', ' || v_objtyp || ', '|| v_schema || ',' || v_objid ||'); END;', start_date => SYSTIMESTAMP, repeat_interval => 'freq=secondly; bysecond=0', end_date => NULL, enabled => TRUE, comments => 'Calls PLSQL once');
où v_delhrs est un nombre. Voici le code de la procédure:
PROCEDURE DROP_OBJ1
(
p_objnam IN CHAR,
p_objtyp IN CHAR,
p_copyto IN ALL_OBJECTS.OWNER%TYPE,
p_objid IN NUMBER
)
IS
v_objnam VARCHAR2 (30);
v_objtyp VARCHAR2 (30);
v_copyto VARCHAR2 (30);
v_objid NUMBER (3);
BEGIN
v_objnam := UPPER (p_objnam);
v_objtyp := UPPER (p_objtyp);
v_copyto := UPPER (p_copyto);
v_objid := p_objid;
--v_copyby := UPPER (p_copyby);
EXECUTE IMMEDIATE (' DROP '
|| v_objtyp
|| ' '
|| v_copyto
|| '.'
|| v_objnam
);
EXECUTE IMMEDIATE (' DELETE FROM COPY_OBJ_DET WHERE OBJ_ID = '
|| v_objid
);
COMMIT;
END;
Je sais que un problème très mineur. Merci d'avance gourous.
À la votre!
Un grand merci, cela fonctionne. Entre les deux, habitez-vous réellement sur un bateau à voile? Merci, vous avez fait ma journée. À la votre! – Tunde
Oui - J'ai vendu ma société de logiciels il y a 2 ans. Nous avons été de haut en bas le coût de l'Est et aux Bahamas. Je vis avec ma belle femme et 2 merveilleux enfants sur un voilier de 50 pieds. –
Vous pouvez consulter la vue user_scheduler_jobs (ou all_scheduler_jobs) pour vérifier que les données de votre travail sont conformes à vos attentes –