IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[CallableStatement] pb insertion de parametre


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut [CallableStatement] pb insertion de parametre DBMS_JOB.submit
    Bonjour, j'ai un petit probleme dont je ne comprends pas la cause.
    je veux lancer une procédure stockée avec des paramètres mais malheureusement cela ne fonctionne pas !

    voici mon code Java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String sql = {call lancer_job(?,?)};
    Date date = getDate(); // Java.sql.date
    String s = "'AM_TEST;'" // il y a des 'cotes' autour de AM_TEST
    CallableStatement st = connexion.prepareCall(sql);
    st.setString(1,s);
    st.setDate(2,date);
    st.execute();
    A priori le code est bon, mais seulement j'ai une erreur ORacle derrière !!
    je vous met le code de lancer_job :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE OR REPLACE PROCEDURE lancer_job(unNom IN VARCHAR2, uneDate IN 
    DATE) IS
      pl_no_job BINARY_INTEGER;
      BEGIN
          DBMS_JOB.submit(pl_no_job, unNom, uneDate, 'sysdate+1');
          commit;
      END lancer_job;
    /
    Suite a l'execution du statement j'ai une erreur qui apparait : mais je ne la comprends pas !!

    ORA-06550: line1, column 125 :
    PLS-00103 : Encoutered the symbol "END" when expecting one of the following:
    := . 5 @ % ;
    The symbol ";" was substitued for "END" to continue.
    ORA-06512: at "SYS.DBMS_JOB", line 79
    ORA-06512: at "SYS.DBMS_JOB", line 136
    ORA-06512: at "F.LANCER_JOB", line 5


    le probleme c'est que j'avais tester cette méthode en dur !!
    avec le submit avec que de parametre en dur le call fonctionne tres bien (sans paramètre biensur) et cela marchait : voici la ligne du submit dans le fichier sql.

    DBMS_JOB.submit(pl_no_job, 'AM_TEST;', sysdate, 'sysdate+1');

    Donc mon probleme est de passer les bon paramètres via la méthode call...

    si quelqu'un voit ou il y a une erreur je veux bien qu'il m'aide

    merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Par défaut
    Citation Envoyé par lilou77
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String s = "'AM_TEST;'" // il y a des 'cotes' autour de AM_TEST
    CallableStatement st = connexion.prepareCall(sql);
    st.setString(1,s);
    Le setString permet d'eviter de mettre des cotes autour de ta string , il le fait tout seul, donc le parametre que tu passe est en faite
    ''AM_TEST'' : 2 cotes au debut et 2 cotes à la fin. essaye de les enlever.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    effectivement c'était ca !!
    je suis trop bete !!
    je n'ai pas pensé que tout était prévu !! en plus je n'y connais rien en exécution de procédure !!!

    MERCI

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    le probleme est résolu mais un nouveau est apparu dans le meme theme, alors j'ai préféré garder le post.

    Le probleme vient de la Date, en effet je la sauvegarde avec une heure et une date, seulement lorsque je visionne mon job l'heure de la prochaine date correspond à l'heure a lakel le job a été créé !
    je ne comprend pas

    par exemple si je veux dire tous les 2 jours a 12h20 à partir du 2/10/06
    ma date contient 2/10/06 - 12h20
    et mon intervalle est 'sysdate+2'
    seulement en base de données, la date correspond mais pas l'heure. je ne comprends pas ! le code est le meme que si dessus, sauf que le parametre interval est rajouté en VARCHAR2 et en setString(3,"sysdate+"+i);
    avec i le nombre de jour.

    si quelqu'un a deja eu ce probleme ou pourrait m'expliquer.

    sinon j'ai essayé de paramétrer l'intervalle par exemple i = nb jour + [(nb heure * 60) + nb min] / 1440
    car 1440min dans une journée, mais cela ne fonctionne pas non plus
    la nouvelle heure n'est pas la bonne !!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 75
    Par défaut
    A tout hazard il s'agit peut être d'un probleme de fuseaux horaires différent entre le serveur oracle et le client java qui declenche ton job ?

    Louis

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    non le probleme ne vient pas de là, merci d'avoir répondu.

    je ne comprends pas !!

    en fait ce qui est bizarre c'est q si ma date est celle d'aujourd'hui, alors avec mon setDate(today at 15h) fonctionne, c'est à dire que dans la base on voit bien sur la même ligne 03/10/2006 15:00:00
    tandis que si mon jour est demain ou apres demain... ma date n'a pas d'heure : en base de données on a juste : 05/10/2006
    et la ligne NEXT_SEC = 00:00:00
    alosr que c'est exactement le meme code java.
    quelqu'un peut-il m'expliquer si il a déjà eu à faire a ce probleme ?
    merci d'avance.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    ok... en fait il ne fallait pas utiliser le format sql.Date mais sql.Timestamp
    cela marche systématiquement, ensuite :
    CallableStatement st = connexion.prepareCall(sql);
    st.setTimestamp(1,timestamp);
    voila, peut etre que cela servira à quelqu'un !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion des parametres OleDB
    Par ouadie99 dans le forum C#
    Réponses: 5
    Dernier message: 03/03/2009, 11h39
  2. PLSQL Insertion dans une table parametré
    Par IcedLand dans le forum PL/SQL
    Réponses: 1
    Dernier message: 07/12/2007, 19h07
  3. Requete parametre insert
    Par neuneu1 dans le forum Bases de données
    Réponses: 8
    Dernier message: 23/04/2007, 12h41
  4. [CallableStatement] pb insertion de parametres
    Par lilou77 dans le forum JDBC
    Réponses: 2
    Dernier message: 28/09/2006, 16h23
  5. Réponses: 2
    Dernier message: 21/07/2005, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo