Bonjour,

Je fais des tests en ce moment en PL/SQL et je suis très embêté avec le package DBMS_SCHEDULER. J'essaye d'insérer dans une table la valeur SYSDATE avec un format comportant heures, minutes et secondes. Pour cela je fais un select sysdate from dual avec le bon format, je stocke le résultat dans une variable et c'est là que les ennuis commencent.

Voici le code de mon fichier .sql :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set serveroutput on
DECLARE
var_s_sysdate VARCHAR2(50);
BEGIN
 
select to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') INTO var_s_sysdate from dual;
-- dbms_output.put_line('DATE = '||var_s_sysdate);
 
DBMS_SCHEDULER.DROP_JOB('PLSQL04');
 
DBMS_SCHEDULER.CREATE_JOB(
job_name           => 'PLSQL04',
job_type           => 'PLSQL_BLOCK',
job_action         => 'insert into util1.essai values (var_s_sysdate) ;',
repeat_interval => 'FREQ=SECONDLY;INTERVAL=10');
 
END;
/
J'utilise dbms_output.put_line pour être sur que la variable est bien formatée : c'est OK.
J'ai ensuite activé le job comme le prouve la commande ci-dessous : les variables ENABLE et STATE sont bien renseignées.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> select JOB_NAME, JOB_ACTION, ENABLED, STATE, REPEAT_INTERVAL from USER_SCHEDULER_JOBS where job_name = 'PLSQL04';

JOB_NAME
------------------------------
JOB_ACTION
--------------------------------------------------------------------------------
ENABL STATE
----- ---------------
REPEAT_INTERVAL
--------------------------------------------------------------------------------
PLSQL04
insert into util1.essai values (var_s_sysdate) ;
TRUE  SCHEDULED
FREQ=SECONDLY;INTERVAL=10
MAIS quand je fais un select * from util1.essai, je n'ai rien...
Je pense que le problème vient du fait que j'utilise une variable dans le paramètre job_action.
job_action => 'insert into util1.essai values (var_s_sysdate) ;',


Voilà, si vous avez des idées, je suis preneur :-)