Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/02/2011, 15h52   #1
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
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 :
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 :
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 22h36   #2
Membre actif
 
Inscription : février 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 167
Points : 161
Points : 161
Par défaut Convertir la string en date

Bonjour,

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

Citation:
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 :
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.
Pozzo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/02/2011, 19h09   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
Je me demande bien pourquoi le gens écrivent du code qui ne sert à rien
Code :
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 :
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
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/02/2011, 12h32   #4
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
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)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web