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

 Oracle Discussion :

insertion direct de date+heure dans un champs


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut insertion direct de date+heure dans un champs
    Rebonsoir à tous,

    Dans le cadre d'un achat de livre pour apprendre le SQL(avec ORACLE) j'ai créé et configuré une instance de BDD ORACLE 11g sous Seven. J'ai avec ce livre 2 scripts qui sont la création des tables et l'insertion des données.

    L'insertion des tables c'est bien passé (enfin je n'est pas encore intégré les contraintes, je pense le faire après les données est ce juste?) par contre j'ai un soucis d'insertion de données.

    J'ai sur 3 tables différentes des insertion de date et heure du style :
    '2002-11-21 17:18:30'

    J'ai beau me renseigné mais je ne vois pas comment les inseré. En fait je cherche à insérer les dates directement en 1 script.
    Mes renseignements mon fait comprendre qu'il était possible sinon de passé par une conversion avec la fonction TO_DATE.
    Mais j'aimerais être sûr de savoir si il est possible ou pas d'inséré directement d'un coup mes dates au lieu de faire des conversion ?

    Voici un script de table dans lequel je souhaite inséré une date du style mentionné ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /*==============================================================*/
    /* Table : T_FORUM_FRM                                          */
    /*==============================================================*/
    create table T_FORUM_FRM  (
       FRM_ID               INTEGER                         not null,
       FRM_NOM              CHAR(64)                        not null,
       FRM_SUJET            VARCHAR2(256),
       FRM_DATE_CREATION    TIMESTAMP                       not null,
       constraint PK_T_FORUM_FRM primary key (FRM_ID)
    );
    Qu'en pensez-vous?
    Pourriez-vous m'aider à obtenir la BDD exemple sous oracle ?


    Merchi à touche,

  2. #2
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Hi,
    J'ai pas trop bien compris le post... mais si tu veux convertir lors de l'insertion dans ta table T_FORUM8FRM, ceci pourrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO  T_FORUM_FRM
    VALUES (1,'miltone','insertion direct de date + heure dans un champs',
              TO_TIMESTAMP ('2002-11-21 17:18:30','YYYY-MM-DD HH24:MI:SS')
      );

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    J'ai pas trop bien compris le post
    En gros j'ai besoin d'avoir : '1996-11-18 20:52:23'
    dans un champ temps ou date d'une base ORACLE tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
           VALUES (1, 'fr.comp.applications.sgbd', 'Bases de données', '1996-11-18 20:52:23', TO_TIMESTAMP('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'));
    Cette commande me retourne :
    Error starting at line 1 in command:
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION)
    VALUES (1, 'fr.comp.applications.sgbd', 'Bases de données', '1996-11-18 20:52:23', TO_TIMESTAMP('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'))
    Error at Command Line:1 Column:12
    Error report:
    SQL Error: ORA-00913: trop de valeurs
    00913. 00000 - "too many values"
    *Cause:
    *Action:



    quant à cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
           VALUES (3, 'fr.comp.applications.sgbd', 'Bases de données', TO_TIMESTAMP('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'));
    Elle m'insere bien les données mais pour ce qui est de la date il n'insère que :
    '18/11/96'

    Peut-être faut t-il codé le caractère espace dans la requête ?

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    J'ai trouvé !

    j'ai fait une altération de la session :

    ALTER session SET nls_date_format='DD/MM/YYYY HH24:MI:SS';

    Enfin je suis obligé de passé par un TIMESTAMP sur chaque ligne d'insertion. Sur 1000 lignes ca fait un peu beaucoup.

    Je tourne mes requetes SQL dans tout les sens et je n'arrive toujours pas à inserer cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
           VALUES (8, 'fr.comp.applications.sgbd', 'Bases de données', '1996-11-18 20:52:23');

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    L'avantage du timestamp par rapport au format date, c'est la prise en compte des millisecondes, la possibilité de jouer avec les fuseaux horaires, et d'être plus ou moins normatif entre les différents SGBD.

    Si vous n'avez besoin d'aucune de ces fonctionnalités, vous pouvez utiliser le format date.

    Quel est le problème avec vos 1000 insertions ?
    Vous allez les effectuer à la main ? Vous n'avez pas un fichier avec ces données ?

  6. #6
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par miltone Voir le message
    quant à cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
           VALUES (3, 'fr.comp.applications.sgbd', 'Bases de données', TO_TIMESTAMP('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'));
    Elle m'insere bien les données mais pour ce qui est de la date il n'insère que :
    '18/11/96'
    Cette requête est la bonne. les heures/minutes/... sont bien insérées, c'est juste que tu ne les voit pas car le format d'affichage dépends du NLS_DATE_FORMAT.

    Donc, changer NLS_DATE_FORMAT c'est bien pour l'affichage.

    Si tu veux une date au lieu d'un timestamp, utilise TO_DATE au lieu de TO_TIMESTAMP.

    Cordialement,
    Franck.

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    merci à vous pour vos réponses...

    Serie de requete qui semble marché pour obtenir '2005-02-23 11:28:13' dans un champ

    type de champ = DATE
    ALTER session SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION)
    VALUES (7, 'fr.comp.applications.sgbd', 'Bases de données', TO_DATE('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'));

    =====================================================

    Par contre mon alter session ne se conserve pas d'une session à l'autre. Donc
    au retour sur ma BDD les champs on tous été modifiés.

    Je me penche sur la question mais si vous avez des conseils je l'es prend avec plaisir.

    Par contre est ce que mon champs date pourra être requeté par rapport au temps, à la date et les deux à la fois ?

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    J'avance j'avance...

    J'ai trouvé le TRIGGER pour appliquer une commande oracle dès la connection de mon utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace
    trigger TG_DB_AFTER_LOGON after logon on database
    begin
    if user = 'miltone' then
    execute immediate 'ALTER session SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
    end if;
    end;
    Malheureusement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute immediate 'ALTER session SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
    Me génère des erreurs. Il n'aime pas les symboles 'YYYY', 'HH24', 'MI', 'SS'

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par miltone Voir le message
    Serie de requete qui semble marché pour obtenir '2005-02-23 11:28:13' dans un champ

    ALTER session SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION)
    VALUES (7, 'nom', 'sujet', TO_DATE('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'));
    Vous faites une opération en trop ici.
    Rien de grave mais c'est pour que vous compreniez mieux.

    Soit vous dites à Oracle que les dates de votre session sont au format 'YYYY-MM-DD HH24:MI:SS', et dans ce cas, vous pouvez directement utiliser le littéral pour insérer une donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER session SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
    VALUES (7, 'nom', 'sujet', '1996-11-18 20:52:23');
    Soit vous ne dites rien à Oracle, vous lui passer la chaîne que vous voulez en lui précisant le format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
    VALUES (7, 'nom', 'sujet', 'Bases de données',
    TO_DATE('1996-11-18 20:52:23','YYYY-MM-DD HH24:MI:SS'));
    Ou encore avec un format plus délirant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO T_FORUM_FRM (FRM_ID, FRM_NOM, FRM_SUJET, FRM_DATE_CREATION) 
    VALUES (7, 'nom', 'sujet',
    TO_DATE('18/1996.11@23:20y52', 'DD/YYYY.MM"@"SS:HH24"y"MI'));

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

Discussions similaires

  1. Format date / heure dans un champ calculé
    Par Zebulon777 dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2013, 08h06
  2. Recuperer la date sans l'heur dans un champ datetime
    Par bob33 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/06/2010, 12h59
  3. Date/heure dans INSERT INTO
    Par Skangell dans le forum IHM
    Réponses: 10
    Dernier message: 25/06/2008, 13h41
  4. Insérer une heure dans un champs date
    Par erox44 dans le forum SQL
    Réponses: 7
    Dernier message: 22/04/2008, 12h25
  5. Réponses: 3
    Dernier message: 12/02/2008, 09h20

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