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 :

format de date en entrée (oracle/asp)


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut format de date en entrée (oracle/asp)
    Bonjour,

    Je suis en train d'adapter un site en asp, pour passer de sql server vers oracle (c'est un site en ASP3, qui tente d'utiliser Oracle 10g).

    Une requête comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from matable where champ_date >= '29/08/2006'
    passait parfaitement sous sql server.

    Elle passe également via oracle raptor.
    Mais pas via les asp !!!
    Dans un tel cas, il faut soit changer '29/08/2006' par '2006/08/29', soit utiliser la fonction to_date, et ça marche - mais ce serait pénible vu la taille de l'appli...

    Les "alter session" et compagnie, pour changer le format de date, ont été sans effet.

    Quelqu'un a-t-il une idée là-dessus ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par SorcierGris
    Les "alter session" et compagnie, pour changer le format de date, ont été sans effet.
    Je suis loin d'être un expert sur Oracle et encore moins en ASP mais si votre colonne est de type date et que vous la comparez à une chaîne de caractères alors, A PRIORI, le paramétrage n'a aucune indicence.

    Pour moi, votre question concerne ASP et non Oracle.
    Si c'est effectivement le cas - ce que le nombre de réponses à votre post tend à confirmer - alors demandez à ce que votre message soit déplacé dans le forum approprié.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Magnus
    Je suis loin d'être un expert sur Oracle et encore moins en ASP mais si votre colonne est de type date et que vous la comparez à une chaîne de caractères alors, A PRIORI, le paramétrage n'a aucune indicence.
    Bwouais mais ça n'explique pas pourquoi ça passe dans oracle raptor et pas dans les pages asp.

    Pour moi, votre question concerne ASP et non Oracle.
    Si c'est effectivement le cas - ce que le nombre de réponses à votre post tend à confirmer - alors demandez à ce que votre message soit déplacé dans le forum approprié.
    Pour le nombre de réponses, je viens de poster la question, alors il paraît normal qu'il y en ait peu.
    Le problème étant que je ne sais pas si le pb est côté oracle ou côté asp...
    Sinon si ça favorise les réponses je veux bien qu'on le déplace

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    je connais pas grand chose en asp, il faudrait pour en avoir le coeur net réussir à capter la requête effectivement passée à oracle ou par les traces oracle.

    Les "alter session" et compagnie, pour changer le format de date, ont été sans effet.
    Il va pourtant bien faloir que ça en ai un parcque sinon c'est tournée de to_date pour tous le monde...

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Je suis plus d'accord avec Remi44 qu'avec Magnus car l'exemple suivant montre que le paramètrage NLS de la session a une influence sur les conversions faites lors de la comparaison d'une chaîne de caractères et d'une date:

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
     
    SQL> 
    SQL> select * from v$version;
     
    BANNER                                                                          
    ----------------------------------------------------------------                
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod                
    PL/SQL Release 10.2.0.1.0 - Production                                          
    CORE	10.2.0.1.0	Production                                                      
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production                         
    NLSRTL Version 10.2.0.1.0 - Production                                          
     
    SQL> 
    SQL> select * from nls_database_parameters;
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_LANGUAGE                   AMERICAN                                         
    NLS_TERRITORY                  AMERICA                                          
    NLS_CURRENCY                   $                                                
    NLS_ISO_CURRENCY               AMERICA                                          
    NLS_NUMERIC_CHARACTERS         .,                                               
    NLS_CHARACTERSET               WE8MSWIN1252                                     
    NLS_CALENDAR                   GREGORIAN                                        
    NLS_DATE_FORMAT                DD-MON-RR                                        
    NLS_DATE_LANGUAGE              AMERICAN                                         
    NLS_SORT                       BINARY                                           
    NLS_TIME_FORMAT                HH.MI.SSXFF AM                                   
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM                         
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR                               
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR                     
    NLS_DUAL_CURRENCY              $                                                
    NLS_COMP                       BINARY                                           
    NLS_LENGTH_SEMANTICS           BYTE                                             
    NLS_NCHAR_CONV_EXCP            FALSE                                            
    NLS_NCHAR_CHARACTERSET         AL16UTF16                                        
    NLS_RDBMS_VERSION              10.2.0.1.0                                       
     
    20 rows selected.
     
    SQL> 
    SQL> select * from nls_instance_parameters;
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_LANGUAGE                   AMERICAN                                         
    NLS_TERRITORY                  AMERICA                                          
    NLS_SORT                                                                        
    NLS_DATE_LANGUAGE                                                               
    NLS_DATE_FORMAT                                                                 
    NLS_CURRENCY                                                                    
    NLS_NUMERIC_CHARACTERS                                                          
    NLS_ISO_CURRENCY                                                                
    NLS_CALENDAR                                                                    
    NLS_TIME_FORMAT                                                                 
    NLS_TIMESTAMP_FORMAT                                                            
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_TIME_TZ_FORMAT                                                              
    NLS_TIMESTAMP_TZ_FORMAT                                                         
    NLS_DUAL_CURRENCY                                                               
    NLS_COMP                                                                        
    NLS_LENGTH_SEMANTICS           BYTE                                             
    NLS_NCHAR_CONV_EXCP            FALSE                                            
     
    17 rows selected.
     
    SQL> 
    SQL> select * from nls_session_parameters;
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_LANGUAGE                   AMERICAN                                         
    NLS_TERRITORY                  AMERICA                                          
    NLS_CURRENCY                   $                                                
    NLS_ISO_CURRENCY               AMERICA                                          
    NLS_NUMERIC_CHARACTERS         .,                                               
    NLS_CALENDAR                   GREGORIAN                                        
    NLS_DATE_FORMAT                DD-MON-RR                                        
    NLS_DATE_LANGUAGE              AMERICAN                                         
    NLS_SORT                       BINARY                                           
    NLS_TIME_FORMAT                HH.MI.SSXFF AM                                   
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM                         
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR                               
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR                     
    NLS_DUAL_CURRENCY              $                                                
    NLS_COMP                       BINARY                                           
    NLS_LENGTH_SEMANTICS           BYTE                                             
    NLS_NCHAR_CONV_EXCP            FALSE                                            
     
    17 rows selected.
     
    SQL> 
    SQL> drop table t;
     
    Table dropped.
     
    SQL> 
    SQL> create table t (d date);
     
    Table created.
     
    SQL> 
    SQL> insert into t values('08-AUG-2006');
     
    1 row created.
     
    SQL> insert into t values('30-DEC-2006');
     
    1 row created.
     
    SQL> insert into t values('08-JUN-2007');
     
    1 row created.
     
    SQL> insert into t values('30-DEC-2007');
     
    1 row created.
     
    SQL> 
    SQL> select * from nls_session_parameters where parameter='NLS_DATE_FORMAT' or parameter='NLS_DATE_LANGUAGE';
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_DATE_FORMAT                DD-MON-RR                                        
    NLS_DATE_LANGUAGE              AMERICAN                                         
     
    SQL> 
    SQL> alter session set nls_date_format='MM/DD/YYYY';
     
    Session altered.
     
    SQL> select * from t where d = '08-AUG-2006';
    select * from t where d = '08-AUG-2006'
                              *
    ERROR at line 1:
    ORA-01858: a non-numeric character was found where a numeric was expected 
     
     
    SQL> select * from t where d = '30-DEC-2006';
    select * from t where d = '30-DEC-2006'
                              *
    ERROR at line 1:
    ORA-01843: not a valid month 
     
     
    SQL> select * from t where d = '06/08/2007';
     
    D                                                                               
    ----------                                                                      
    06/08/2007                                                                      
     
    SQL> select * from t where d = '12/30/2007';
     
    D                                                                               
    ----------                                                                      
    12/30/2007                                                                      
     
    SQL> 
    SQL> 
    SQL> alter session set nls_date_format='DD/MM/YYYY';
     
    Session altered.
     
    SQL> select * from nls_session_parameters where parameter='NLS_DATE_FORMAT' or parameter='NLS_DATE_LANGUAGE';
     
    PARAMETER                      VALUE                                            
    ------------------------------ ----------------------------------------         
    NLS_DATE_FORMAT                DD/MM/YYYY                                       
    NLS_DATE_LANGUAGE              AMERICAN                                         
     
    SQL> select * from t where d = '08-AUG-2006';
     
    D                                                                               
    ----------                                                                      
    08/08/2006                                                                      
     
    SQL> select * from t where d = '30-DEC-2006';
     
    D                                                                               
    ----------                                                                      
    30/12/2006                                                                      
     
    SQL> select * from t where d = '06/08/2007';
     
    no rows selected
     
    SQL> select * from t where d = '12/30/2007';
    select * from t where d = '12/30/2007'
                              *
    ERROR at line 1:
    ORA-01843: not a valid month 
     
     
    SQL> 
    SQL> commit;
     
    Commit complete.
     
    SQL> 
    SQL> exit

  6. #6
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Points : 40
    Points
    40
    Par défaut
    salut,
    si comme tu le dis les NLS ont été sans effet il te reste l'utilisation de la fonction to_date,il est difficile de changer toutes les valeurs manuellement mais si tu te connais en Unix(ou tout simplement linux) je te donne cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed "s/\('[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]'\)/ to_date(\1,'DD\/MM\/YYYY')/"   fichier_à_modifier   > fichier_corrigé
    cette commande vas convertir toutes les valeur de type '##/##/####' en to_date('##/##/####','DD\/MM\/YYYY') (y compris l'apostrophe ).
    salutations.

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par SorcierGris
    ... Dans un tel cas, il faut soit changer '29/08/2006' par '2006/08/29' ...
    J'ai un doute là, tu es sur ce tu as bien déclarer les champs avec le type date ? parcque l'utilisation à l'envers Annee/mois/jour me fait penser à un stockage de type caractères....

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par pifor
    Je suis plus d'accord avec Remi44 qu'avec Magnus car l'exemple suivant montre que le paramètrage NLS de la session a une influence sur les conversions faites lors de la comparaison d'une chaîne de caractères et d'une date
    Effectivement, votre exemple est incontestable et pour ma défense, j'avais prévenu que je ne connaissais pas ASP et que je suis loin d'être un expert Oracle (1 an d'expérience)

    Sorry, je ne faisais que passer

    pifor >> on voit bien dans votre exemple que l'influence du paramétrage réside "dans l'ordre" des différents éléments d'une date : on ne doit pas intervertir le jour et le mois sous peine de générer une erreur, etc.
    Cependant, on voit aussi clairement que les séparateurs de colonnes "/" ou "-" précisés dans le paramétrage ne sont pas à respecter scrupuleusement.
    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
    8i SOC95> alter session set nls_date_format = 'MM/DD/YY';
     
    Session modifiée.
     
    8i SOC95> insert into dvp values ('&val');
     
    Entrez une valeur pour val : JUN-15-07
     
    1 ligne créée.
     
    8i SOC95> select *
      2  from dvp;
     
    X
    --------
    06/15/07
    Connaissez-vous une manière de paramétrer une session de manière à ce que l'on soit obligé de respecter ces séparateurs (de la même manière que si l'on utilise FX dans TO_CHAR / TO_DATE) ?

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par hadlak
    salut,
    cette commande vas convertir toutes les valeur de type '##/##/####' en to_date('##/##/####','DD\/MM\/YYYY') (y compris l'apostrophe ).
    D'une part la base tourne sous windows, pas linux, et d'autre part, il n'y a pas de dates "en dur" dans le code. Les dates viennent, pour la plupart, de champs de saisie, ou de champs de base. Merci quand même...

    Citation Envoyé par remi4444
    J'ai un doute là, tu es sur ce tu as bien déclarer les champs avec le type date ? parcque l'utilisation à l'envers Annee/mois/jour me fait penser à un stockage de type caractères....
    J'ai vérifié dans les tables, ce sont bien des champs de date.

    Citation Envoyé par remi4444
    je connais pas grand chose en asp, il faudrait pour en avoir le coeur net réussir à capter la requête effectivement passée à oracle ou par les traces oracle.
    ça, je sais pas faire... Mais comme oracle raptor utilise jdbc (et, là, ça marche), contrairement aux asp qui utilisent odbc (je crois), ça vient peut-être du provider sql, pas d'oracle directement.

    Citation Envoyé par remi4444
    Il va pourtant bien faloir que ça en ai un parcque sinon c'est tournée de to_date pour tous le monde...
    Yep, je suis tout à fait d'accord avec ça !!!

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Mais comme oracle raptor utilise jdbc (et, là, ça marche), contrairement aux asp qui utilisent odbc (je crois), ça vient peut-être du provider sql, pas d'oracle directement.
    C'est bien possible en effet... il faudrait que tu puisse en avoir le coeur net en allant chercher la valeur de NLS_DATE_FORMAT vue NLS_SESSION_PARAMETER juste avant un appel à ta requête de date.

    Le seul moyen de ne pas tout réécrire est d'agir sur ce paramètre session. Je ne sais pas si ça peut se faire en asp ou dans un paramétrage au niveau d'odbc (si qqun à la réponse ça m'interresse d'ailleurs...)

    il faut arriver à passer la commande "alter session set NLS_DATE_FORMAT = 'DD/MM/YYY'" soit directement soit en appelant une mini procédure stockée qui le fait...

    PS: Nieme illustration qu'un langage permétant les conversion implicites est une calamité...

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par remi4444
    C'est bien possible en effet... il faudrait que tu puisse en avoir le coeur net en allant chercher la valeur de NLS_DATE_FORMAT vue NLS_SESSION_PARAMETER juste avant un appel à ta requête de date.
    Ah ben oui, on y trouve ceci : "YYYY-MM-DD HH24:MI:SS"
    Seulement j'ai beau faire un alter session dans l'asp, il en a rien à battre !

    Le seul moyen de ne pas tout réécrire est d'agir sur ce paramètre session. Je ne sais pas si ça peut se faire en asp ou dans un paramétrage au niveau d'odbc (si qqun à la réponse ça m'interresse d'ailleurs...)
    Apparamment, en asp, ça ne passe pas

    il faut arriver à passer la commande "alter session set NLS_DATE_FORMAT = 'DD/MM/YYY'" soit directement soit en appelant une mini procédure stockée qui le fait...
    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
     
    CREATE OR REPLACE PROCEDURE OMWB_LOGIN2.ALTER_SESSION_TEST_PHIL AS
    BEGIN
    alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS';
    commit;
    END;
    PROCEDURE OMWB_LOGIN2.ALTER_SESSION_TEST Compiled.
     
    commit;
    commit succeeded.
     
    call OMWB_LOGIN2.ALTER_SESSION_TEST
    Error starting at line 1 in command:
    call OMWB_LOGIN2.ALTER_SESSION_TEST
    Error report:
    SQL Error: ORA-06576: ceci n'est pas un nom de fonction ou de proc�dure valide
    L'idée est bonne, mais j'ai dû me planter qq part...

    PS: Nieme illustration qu'un langage permétant les conversion implicites est une calamité...
    Ouais amha c'est surtout les types de données qui sont du n'importe nawak

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    le "alter session" n'est pas du SQL, il faut donc le passer dans un EXECUTE IMMEDIATE

    au passage, le commit n'est pas utile (justement parceque c'est pas du SQL...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE OR REPLACE PROCEDURE OMWB_LOGIN2.ALTER_SESSION_TEST_PHIL AS
    BEGIN
    EXECUTE IMMEDIATE 'alter session set nls_date_format = ''DD/MM/YYYY HH24:MI:SS''';
    END;

  13. #13
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par remi4444
    le "alter session" n'est pas du SQL, il faut donc le passer dans un EXECUTE IMMEDIATE

    au passage, le commit n'est pas utile (justement parceque c'est pas du SQL...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE OR REPLACE PROCEDURE OMWB_LOGIN2.ALTER_SESSION_TEST_PHIL AS
    BEGIN
    EXECUTE IMMEDIATE 'alter session set nls_date_format = ''DD/MM/YYYY HH24:MI:SS''';
    END;
    Okay, mais le call ne passe toujours pas, et l'execute immediate est sans effet dans l'asp.

  14. #14
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    c'est peut etre parceque ta fonction s'appelle ALTER_SESSION_TEST_PHIL et que ton call fait appel à ALTER_SESSION_TEST....

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par remi4444
    c'est peut etre parceque ta fonction s'appelle ALTER_SESSION_TEST_PHIL et que ton call fait appel à ALTER_SESSION_TEST....
    Non c'est juste que je me suis planté en recopiant ici

    EDIT:
    ça a finalement voulu marcher, et me change NLS_DATE_FORMAT en DD/MM/YYYY (je l'affiche dans l'asp, après appel à la procédure stockée).

    Seulement... Les requêtes avec dates dedans ne passent toujours pas !!!

  16. #16
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par Magnus

    Connaissez-vous une manière de paramétrer une session de manière à ce que l'on soit obligé de respecter ces séparateurs (de la même manière que si l'on utilise FX dans TO_CHAR / TO_DATE) ?
    Avec 10.2.0.1, on peut utiliser FX dans avec NLS_DATE_FORMAT:


    SQL> alter session set nls_date_format='FXDD/MM/YY';

    Session altered.

    SQL> select * from td;

    D
    --------
    01/07/06
    01/07/06
    01/07/06
    01/07/06
    15/07/06
    05/07/06
    30/07/06
    01/09/06
    01/09/06
    01/09/06

    10 rows selected.

    SQL> select sysdate from dual;

    SYSDATE
    --------
    30/08/06

    SQL> insert into td values('01-SEP-2006');
    insert into td values('01-SEP-2006')
    *
    ERROR at line 1:
    ORA-01861: literal does not match format string


    SQL> insert into td values('01/SEP/2006');
    insert into td values('01/SEP/2006')
    *
    ERROR at line 1:
    ORA-01858: a non-numeric character was found where a numeric was expected


    SQL> insert into td values('01/09/2006');
    insert into td values('01/09/2006')
    *
    ERROR at line 1:
    ORA-01830: date format picture ends before converting entire input string


    SQL> insert into td values('01/09/06');

    1 row created.

    SQL> insert into td values('01-09-06');
    insert into td values('01-09-06')
    *
    ERROR at line 1:
    ORA-01861: literal does not match format string


    SQL>

  17. #17
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par pifor
    Avec 10.2.0.1, on peut utiliser FX dans avec NLS_DATE_FORMAT
    ça fonctionne aussi avec 10.1.0.3.0

    Merci.

  18. #18
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par Magnus
    ça fonctionne aussi avec 10.1.0.3.0

    Merci.
    Et en 9.2.0.6 aussi.

  19. #19
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Le alter session a fini par fonctionner, mais il a été mis non pas dans l'asp, mais dans le composant COM qui gère la connexion (on gère ça là-dedans pour éviter de mettre la chaîne de connexion dans un asp, endroit trop vulnérable).
    C'est bien un alter session set nls_date_format='DD/MM/YYYY' qu'il fallait faire.

    Je n'ai pas saisi pourquoi ça marche là et pas dans les asp, mais bon c'est résolu c'est l'essentiel

  20. #20
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Merci d'avoir donné la solution, il est possible que le composant filtre les commande qui ne sont pas de sql, il faudrait vérifier, ou demander à quelqu'un qui s'y connait bien...

    De toutes façon, il faut faire cette commande en ouverture de session, pas à chaque requête, donc c'est le bon endroit pour mettre cette commande.

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

Discussions similaires

  1. Problème de format de date entre Java et Oracle
    Par NFHnv dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 16/07/2013, 14h56
  2. Comment changer le format de DATE dans Oracle
    Par khanfir dans le forum Oracle
    Réponses: 3
    Dernier message: 20/04/2010, 19h55
  3. [MySQL] Format de date différent entre PHP et ASP
    Par lekev62 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/06/2009, 12h36
  4. [Oracle/ASP.NET/C#] Format de nb float/Single
    Par gael.mases dans le forum Accès aux données
    Réponses: 8
    Dernier message: 05/12/2005, 10h12
  5. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12

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