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

SQL Oracle Discussion :

Procédure stockée Exception ORA-01858


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut Procédure stockée Exception ORA-01858
    Bonjour tout le monde,

    J'essaie de lancer une procédure stockée ORACLE à partir de code JAVA généré par l'ETL TALEND, mais j'ai l'exception suivante :

    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
    19
    20
    java.sql.SQLException: ORA-20001: An error was encountered - -1858 -ERROR- ORA-01858: caractère non numérique rencontré à la place d'un numérique
    ORA-06512: à "CFAMDATA1.PRETRAITEMENT_EOD", ligne 78
    ORA-06512: à ligne 1
     
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
        at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:215)
        at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:965)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
        at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3445)
        at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4394)
        at test.a_sr_0_1.preTraitementEOD.tFixedFlowInput_1Process(preTraitementEOD.java:1638)
        at test.a_sr_0_1.preTraitementEOD.tOracleConnection_1Process(preTraitementEOD.java:619)
        at test.a_sr_0_1.preTraitementEOD.tMsgBox_2Process(preTraitementEOD.java:497)
        at test.a_sr_0_1.preTraitementEOD.tMsgBox_1Process(preTraitementEOD.java:405)
        at test.a_sr_0_1.preTraitementEOD.runJobInTOS(preTraitementEOD.java:2031)
        at test.a_sr_0_1.preTraitementEOD.main(preTraitementEOD.java:1876)
    Voici le code de ma procédure stockée ORACLE :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     FUNCTION getlastexedate (p_date VARCHAR2, p_entite VARCHAR2)
          RETURN number
       IS
          v_date     DATE;
          p_date_1   DATE;
       BEGIN
     
          SELECT MAX (ap.posting_date)
            INTO v_date
            FROM t1 ap, t2 ae
           WHERE ap.col3 = ae.ID
             AND ae.col2 = p_entite
             AND ap.col1 IN (2, 3, 4);
     
          p_date_1 := j_1_ouvre (p_date);
     
          IF p_date_1 = v_date
          THEN
             RETURN 1;
          END IF;
     
          RETURN -1;
       EXCEPTION
          WHEN OTHERS
          THEN
             raise_application_error (-20001,
                                         'An error was encountered - '
                                      || SQLCODE
                                      || ' -ERROR- '
                                      || SQLERRM
                                     );
       END;
    En fait il s'agit de la date que je passe en paramètre sous la forme String date = "25/01/2011" qui cause problème.

    Le code généré par TALEND utilise le JDBC c'est pour ça que je poste ce problème ici.

    Si vous avez une idée S.V.P n'hésitez pas.
    Merci par avance.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut Convertir la string en date
    Bonjour,

    Voici le détail de la doc Oracle sur le message d'erreur.

    ORA-01858: a non-numeric character was found where a numeric was expected
    Cause:
    The input data to be converted using a date format model was incorrect.
    The input data did not contain a number where a number was required by the format model.
    Action:
    Fix the input data or the date format model to make sure the elements match in number and type. Then retry the operation.
    Vous comparez la string 25/01/2011 à des dates.
    Or vous ne pouvez pré-supposer qu'elle sera acceptée en tant que date.

    La première des choses à faire dans la routine PlSql est de déclarer une variable de type date et de convertir votre chaîne en date EN PRECISANT LE FORMAT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    -- Declare
    -- Paramètres
    ld_date date;
     
    Begin
    -- Paramètres 
    ld_date := to_date(p_date, 'DD/MM/YYYY');
    ...
    Pozzo
    PS : Accessoirement les variables du genre v_date, p_date, ld_date sont un peu "muettes" c'est un peu casse figure (surtout en maintenance) mais vu le nom des tables et des colonnes je suppose que c'est une présentation simplifiée de votre soucis.

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Je me demande bien pourquoi le gens écrivent du code qui ne sert à rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    EXCEPTION
          WHEN OTHERS
          THEN
             raise_application_error (-20001,
                                         'An error was encountered - '
                                      || SQLCODE
                                      || ' -ERROR- '
                                      || SQLERRM
                                     );
       END;
    Pire encore ça a comme effet de bord de perdre la précieuse information concernant la ligne où l'erreur est arrivé.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    SQL*Plus: Release 11.2.0.1.0 Production on Sam. FÚvr. 19 19:03:24 2011
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    
    
    ConnectÚ Ó :
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    mni@DIANA> create or replace procedure foo Is
      2    l_var    number;
      3  Begin
      4    l_var := 'A';
      5  End;
      6  /
    
    ProcÚdure crÚÚe.
    
    mni@DIANA> exec foo
    BEGIN foo; END;
    
    *
    ERREUR Ó la ligne 1 :
    ORA-06502: PL/SQL : erreur numÚrique ou erreur sur une valeur: erreur de conversion des caractÞres en chiffres
    ORA-06512: Ó "MNI.FOO", ligne 4
    ORA-06512: Ó ligne 1
    mni@DIANA> create or replace procedure foo Is
      2    l_var    number;
      3  Begin
      4    l_var := 'A';
      5  EXCEPTION
      6        WHEN OTHERS
      7        THEN
      8           raise_application_error (-20001,
      9                                       'An error was encountered - '
     10                                    || SQLCODE
     11                                    || ' -ERROR- '
     12                                    || SQLERRM
     13                                   );
     14  End;
     15  /
    
    ProcÚdure crÚÚe.
    
    mni@DIANA> exec foo
    BEGIN foo; END;
    
    *
    ERREUR Ó la ligne 1 :
    ORA-20001: An error was encountered - -6502 -ERROR- ORA-06502: PL/SQL : erreur numÚrique ou erreur sur une valeur: erre
    r de
    conversion des caractÞres en chiffres
    ORA-06512: Ó "MNI.FOO", ligne 8
    ORA-06512: Ó ligne 1

  4. #4
    Membre Expert
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut
    Merci pour vos réponses,
    Je teste, et je vous fais un retour après.

    Merci beaucoup.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

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

Discussions similaires

  1. Gestion d'exception dans une procédure stockée
    Par ramone dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2010, 18h58
  2. erreur ora-06502 dans procédure stockée
    Par zorino dans le forum SQL
    Réponses: 8
    Dernier message: 17/04/2007, 18h53
  3. Réponses: 2
    Dernier message: 06/12/2006, 08h54
  4. [C#/SQL] Comment gérer les exceptions d'une Procédure stockée ?
    Par thomas_strass dans le forum Accès aux données
    Réponses: 10
    Dernier message: 06/07/2005, 10h40
  5. Réponses: 3
    Dernier message: 09/11/2004, 14h43

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