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

Toad Oracle Discussion :

TIMESTAMP sur oracle 10


Sujet :

Toad Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Par défaut TIMESTAMP sur oracle 10
    Bonjour,
    je veux creer une table avec une colonne qui afficharera la date et l'heure pour cela j'ai utilisé comme type de donnée TIMESTAMP mais ça ne marche pas.j'ai fait:
    Date_heure timestamp(0), et j'obtient type de donnée not supported
    Par la suite j'ai fait :
    Date_heure long date, et j'obtient parenthèse absente

    et quand je mets Date_heure date,
    j'obtient que la date alors que je veux la date et l'heure
    quel type de donnée utiliser?
    Merci de m'aider

  2. #2
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    Le type DATE comporte bel et bien l'heure mais il faut utiliser un TO_STRING(...,'<format>') pour avoir ce que l'on veut.

    Le type TIMESTAMP(0) devrait être pris en charge, poste ton SQL s.v.p.

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Bonjour

    Le type TIMESTAMP fonctionne parfaitement en 10g, vous avez dû faire une erreur de manipulation quelconque.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> create table test(date_heure timestamp(0));
     
    Table créée.
    En l'espèce, TIMESTAMP(0) ne vous apporte rien de plus qu'un type DATE, qui stocke automatiquement année, mois, jour, heures, minutes et secondes.

    Ce n'est ensuite qu'une question d'affichage pour visualiser la partie horaire de la date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE test(date_heure DATE);
    INSERT INTO test VALUES(sysdate);
    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
    SQL> SELECT * FROM test;
     
    DATE_HEU
    --------
    16/05/08
     
    1 ligne sÚlectionnÚe.
     
    SQL> alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS';
     
    Session modifiÚe.
     
    SQL> SELECT * FROM test;
     
    DATE_HEURE
    -------------------
    16/05/2008 14:29:32
     
    1 ligne sÚlectionnÚe.
    Alternativement, on peut dans chaque SELECT imposer un format d'affichage particulier à l'aide de TO_CHAR (TO_STRING n'existe pas sous Oracle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> SELECT to_char(date_heure, 'HH24:MI:SS') FROM test;
     
    TO_CHAR(
    --------
    14:29:32
     
    1 ligne sÚlectionnÚe.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Par défaut
    voici mon sql:
    CREATE TABLE employe( numero_INDEX integer,
    Nom_employe varchar(50),
    date_heuredeb timestamp(0),
    date_heurefin timestamp(0),
    SUI_PERIODEB date,
    SUI_PERIOFIN date,
    SUI_ETAT varchar(50)
    )
    et j'aimmerais remplacer les deux colonnes SUI_PERIODEB date et SUI_PERIOFIN date, par une seule colonne periode qui me donnera
    SUI_PERIODEB et SUI_PERIOFIN .

  5. #5
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    En l'espèce, TIMESTAMP(0) ne vous apporte rien de plus qu'un type DATE
    Moi je dirais que cela apporte en plus la gestion du TIMEZONE tout de même.
    TO_STRING n'existe pas sous Oracle
    J'ai tappé un peu vite, désolé.

    Cela dit il faudrait peut-être leur dire de rajouter la fonction, car après tout un CHAR c'est un caractère et un STRING est un chaîne et c'est bien une chaîne qu'on veut...


  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par philcero Voir le message
    Moi je dirais que cela apporte en plus la gestion du TIMEZONE tout de même.
    Eh non, même pas !
    Le type TIMESTAMP tout court ne gère pas les fuseaux horaires, pour cela il faut utiliser le type TIMESTAMP WITH TIMEZONE le bien nommé.

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par sajodia Voir le message
    ...
    et j'aimmerais remplacer les deux colonnes SUI_PERIODEB date et SUI_PERIOFIN date, par une seule colonne periode qui me donnera
    SUI_PERIODEB et SUI_PERIOFIN .
    Sauf si une finesse m'échappe, ça n'a pas de sens de faire ça.
    Si le début et la fin sont deux informations distinctes, alors il faut bien deux colonnes pour les stocker.

  8. #8
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    Le type TIMESTAMP tout court ne gère pas les fuseaux horaires, pour cela il faut utiliser le type TIMESTAMP WITH TIMEZONE le bien nommé.
    Je suis d'accord, je parlais de la différence entre utiliser un type DATE et un type TIMESTAMP (Le WITH TIMEZONE était sous-entendu).

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Par défaut
    cette colonne periode est un intervalle de temps je veux
    ex:
    [01/01/08 au 31/13/2020] et non une date exacte

  10. #10
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    Va falloir songer à l'exploitabilité si tu veux mon avis...

    Tu peux cela-dit garder tes deux colonnes et créer une troisième pour l'intervalle que tu alimente en auto à l'aide de deux triggers.

    Un BEFORE INSERT et un BEFORE UPDATE.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sajodia Voir le message
    cette colonne periode est un intervalle de temps je veux
    ex:
    [01/01/08 au 31/13/2020] et non une date exacte
    Tel que tu exprimes ta notion de période, il y a une date de début et une date de fin.
    Quelle est l'intérêt alors de mettre ça dans une seule colonne, à part pour complexifier la manipulation des données ?

  12. #12
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par sajodia Voir le message
    cette colonne periode est un intervalle de temps je veux
    ex:
    [01/01/08 au 31/13/2020] et non une date exacte
    On choisit un type de données en fonction des valeurs qu'il peut stocker et des manipulations qui seront possibles sur ce type.

    Si vous devez faire uniquement de l'affichage (et jamais de tri, de comparaison, de calcul quelconque), alors vous pouvez simplement utiliser un type VARCHAR2 et y mettre "01/01/08 au 31/13/2020".

    En revanche, si vous devez par moment distinguer le début et la fin de la période, comparer, appliquer des critères de sélection, alors non seulement il vous faudra bien deux colonnes, mais il sera de plus vivement conseillé qu'elles soient de type DATE pour que vous puissiez faire commodément les manipulations voulues.

Discussions similaires

  1. Précision sur Oracle 9iAS r2
    Par Patmane dans le forum Oracle
    Réponses: 9
    Dernier message: 18/03/2007, 04h41
  2. Réponses: 17
    Dernier message: 15/05/2006, 12h28
  3. Problème sur Oracle Toolbox
    Par Doctor Z dans le forum Oracle
    Réponses: 9
    Dernier message: 09/11/2004, 08h48
  4. problème de charge CPU SUR ORACLE
    Par crasho007 dans le forum Administration
    Réponses: 35
    Dernier message: 19/05/2004, 15h35

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