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

PL/SQL Oracle Discussion :

Comment insérer une date 9999-01-01 00:00:00 avec dump = Typ=12 Len=7: 1,1,1,1,1,1,1


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Points : 126
    Points
    126
    Par défaut Comment insérer une date 9999-01-01 00:00:00 avec dump = Typ=12 Len=7: 1,1,1,1,1,1,1
    Bonjour,
    Je suis en train d'écrire un update pour une vielle application dont je tente de faire une requête d update qui met à jour un champ date avec la valeur "9999-01-01 00:00:00".
    Après cette update, mon application a planté, car j'ai remarqué qu'il y avait deux formats.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select dateTest,dump (t$demi),dateTest from T;
     
    9999-01-01 00:00:00	Typ=12 Len=7: 199,199,1,1,1,1,1
    9999-01-01 00:00:00	Typ=12 Len=7: 1,1,1,1,1,1,1
    En fait, j'ai besoin d'encoder une "9999-01-01 00:00:00" avec un dump = Typ=12 Len=7: 1,1,1,1,1,1,1. dans ma table.
    Après pas mal de recherche, je ne sais pas comment je dois faire, auriez-vous une idée ?

    Merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Bizarre,

    Après des tests, le 9999 correspond bien à ce que tu as.
    Le 1,1,1,1,1 correspondrait à -9999 (ce qui n'est pas possible car la date Oracle est minimum à -4713), tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_char(d, 'SYYYY/MM/DD HH24:MI:SS')
    ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    	DUMP(CAST(TO_DATE('-4499/01/01 00:00:00', 'SYYYY/MM/DD HH24:MI:SS') AS date)) d4499,
    	DUMP(CAST(TO_DATE('-4599/01/01 00:00:00', 'SYYYY/MM/DD HH24:MI:SS') AS date)) d4599,
    	DUMP(CAST(TO_DATE('-4699/01/01 00:00:00', 'SYYYY/MM/DD HH24:MI:SS') AS date)) d4699
    FROM dual
     
     
    D4499 : Typ=12 Len=7: 56,1,1,1,1,1,1	
    D4599 : Typ=12 Len=7: 55,1,1,1,1,1,1
    D4699 : Typ=12 Len=7: 54,1,1,1,1,1,1
    Pour info sur le stockage : https://stackoverflow.com/questions/...ored-in-oracle
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Points : 126
    Points
    126
    Par défaut
    Merci pour la réponse, je trouve ca étrange aussi.

    j'ai ajouté a ma requête "to_char(t$demi, 'SYYYY/MM/DD HH24:MI:SS')"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        select 
            t$demi
           ,dump (t$demi) 
           ,to_char(t$demi, 'SYYYY/MM/DD HH24:MI:SS')
        from 
            T;

    Et voici le résultat/


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    01-JAN-99	Typ=12 Len=7: 199,199,1,1,1,1,1	 9999/01/01 00:00:00
    01-JAN-99	Typ=12 Len=7: 1,1,1,1,1,1,1	00000/00/00 00:00:00
    je ne comprends pas le comportement....!! Comment fais-tu pour faire une date "00000/00/00 00:00:00" ?
    Comment cette application arrive a encoder une telle date ?
    De plus, je n'arrive même pas a recréer, une simple table avec une telle valeur dans un champ date !

    Mercd de votre aide .

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Points : 126
    Points
    126
    Par défaut
    J'ai trouvé une solution...
    Je convertis la valeur en raw puis je l'insére dans dans la table.

    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
     
     
    create table t42(dt date);
     
    declare
        d date;
    begin
     
        dbms_stats.convert_raw_value('01010101010101', d);
        insert into t42 (dt) values (d);
    end;
    /
    select 
      dt,
      dump(dt), 
      to_char(dt, 'SYYYY/MM/DD HH24:MI:SS')
    from t42
     
    select * from t42

    Result

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    9999-01-01 00:00:00	Typ=12 Len=7: 1,1,1,1,1,1,1	00000/00/00 00:00:00

    Bien à vous,

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Joli astuce.. mais par contre faut savoir que c'est quand même un contournement de l'utilisation Oracle.
    Comment fonctionne cette date dans une requête ?
    Si tu fais un , est-ce que tes lignes bizarres ressortent ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 291
    Points : 126
    Points
    126
    Par défaut
    C'est vraiment strange.... ;-)

    9999 est inférieur a aujourd'hui


    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
    select 
      dt,
      dump(dt), 
      to_char(dt, 'SYYYY/MM/DD HH24:MI:SS')
    from t42
    where dt > SYSDATE;
     
     
    select 
      dt,
      dump(dt), 
      to_char(dt, 'SYYYY/MM/DD HH24:MI:SS')
    from t42
    where dt < SYSDATE ;
     
     
    9999-01-01 00:00:00	Typ=12 Len=7: 1,1,1,1,1,1,1	00000/00/00 00:00:00
    9999-01-01 00:00:00	Typ=12 Len=7: 1,1,1,1,1,1,1	00000/00/00 00:00:00

Discussions similaires

  1. Comment insérer une date
    Par zahira-asmaa dans le forum SQL
    Réponses: 14
    Dernier message: 27/03/2014, 10h24
  2. Comment insérer la date actuelle dans une requête SQL ?
    Par AMINE07 dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/11/2007, 16h47
  3. Comment insérer une date qui peut être nulle ?
    Par guidav dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/01/2007, 16h18
  4. Comment fait-on pour insérer une date dans un champs DateTime
    Par gibea00 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/01/2007, 01h04
  5. Comment insérer une date dans FireBird/Interbase ?
    Par tipiweb dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/05/2006, 16h54

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