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 :

Transformer deux champs Date et Heure en Date/Heure


Sujet :

SQL Oracle

  1. #21
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Bon, un dump() utilisé sur une variable DATE retourne bien un code SQLT_DAT (12) !!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> set serveroutput on
    SQL> declare
      2    d DATE := sysdate;
      3    s VARCHAR2(100);
      4  begin
      5    select dump(d) into s from dual;
      6    dbms_output.put_line(s);
      7  end;
      8  /
    Typ=12 Len=7: 120,108,9,4,14,39,2
    Donc pour dump(), sysdate et to_date() n'ont pas le même type qu'une variable DATE....

    Il ya surement une bonne raison mais la je ne vois pas...

  2. #22
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    SQLT_DAT correspond à une structure de 7 bytes (format dans les docs oracle) et dump() pour le SQLT_DAT montre bien len=7

    Pour le code 13, dump() donne len=8... En fait cela pourrait correspondre à la taille de la structure OCIDate introduite avec 8i et correspond au code SQLT_ODT...qui est 156...

    J'ai tenté de définier un buffer avec le code 13 avec OCI lors de l'éxécution d'un sysdatre sur dual, mais j'ai eu une erreur spécifiant que le type attendu était "DTY0" et pas date...

    Donc, pour poi, toujours mystère...

  3. #23
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Sympa. Voilà le type 12 revenu par a fenêtre.
    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
     
    Connecté à :
    Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
    JServer Release 9.2.0.5.0 - Production
     
    SQL> create table test_date(d date);
     
    Table créée.
     
    SQL> insert into test_date values(sysdate);
     
    1 ligne créée.
     
    SQL> commit;
     
    Validation effectuée.
     
    SQL> select dump(d) from test_date;
     
    DUMP(D)
    --------------------------------------------------------------------------------
    Typ=12 Len=7: 120,108,9,4,18,28,33

  4. #24
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Yep, j'ai fait le même test cet après midi.

    J'ai essayé un peu toute les combinaisons et seuls to_date() et sysdate retourne un code 13...

    Cela doit être une variante du 12 avec peut être un octet supplémentaire pour stocker des infos de conversion...

    Bon, je regarderai le contenu exact du dump() pour creuser la chose...

    Ca sert à rien... mais bon...

  5. #25
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926

  6. #26
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Merci Laurent pour l'info...

    Je suis familier de la structure C correspondant au code SQLT_DAT mais ne connaissais pas cette structure interne..

    J'avais beau essayé de faire un lien entre les deux outputs des dump() avec code 12 et 13 sans succès...

    Donc, pour résumer grosso modo, le type 13 est un type de date interne utilisé par sysdate et to_date() qui stocke la date différemment de SQLT_DAT (12) pour des raisons propre à Oracle...

  7. #27
    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
    Franchement merci pour cet approfondissement.

  8. #28
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Bravo les gars

    Beau boulot !
    Je ne pensais pas provoquer tout ça avec cette question.
    Je vous en trouverai d'autres !

    Merci à tous.

Discussions similaires

  1. [AC-2003] requete trie entre deux champs et un intervalle de dates
    Par papou23 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/01/2011, 15h39
  2. Réponses: 7
    Dernier message: 29/11/2010, 12h26
  3. Réponses: 3
    Dernier message: 03/02/2009, 14h54
  4. Réponses: 2
    Dernier message: 21/03/2007, 16h06
  5. [SQL] un champ Timestamp ou deux champs Date et Heure?
    Par davmaster62 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/02/2006, 23h04

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