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 :

Insertion d'une heure passée en paramètre à une procédure


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut Insertion d'une heure passée en paramètre à une procédure
    Bonjour,

    j'ai une table contenant 2 champs heuredebut et heurefin.
    Je les ais déclarés au format DATE lors de la création. Je pense que c'est bon ?
    J'ai créé une procédure plsql pour insérer dans cette table.
    Comment dois-je passer ces paramètres ?
    solution 1 : au format matable.heuredebut%type
    solution 2 : char puis utiliser to_date(param, 'HH24:MI)

    La solution 2 marche, mais pourquoi passer par un char alors qu'on pourrait travailler uniquement sur des dates et heures ?
    Mes données proviennent d'une application winform en C#
    Merci pour les conseils

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

    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
    Billets dans le blog
    4
    Par défaut
    Une date a forcément le jour.
    Faire un to_date(xxx, 'HH24:MI') va quand même créer une date (premier jour du mois en cours)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SYSDATE, TO_DATE('15:16', 'HH24:MI')
    FROM dual
     
     
    SYSDATE			TO_DATE('15:16','HH24:MI')
    05/11/2012 13:53:36	01/11/2012 15:16:00
    Pour avoir des heures dans une table, plusieurs solutions :
    Champ Date (il faudra donc savoir que le jour/mois/année ne sert à rien) : Inconvénient limité à 24h
    Champ Varchar2 : Attention aux incohérences genre 08h88. A gérer en contrainte ou trigger.
    Champ Number. (Nb de minutes depuis 0h00)

    Chaque solution a des avantages et des inconvénients. Tout dépend de l'utilisation (affichage pur, calculs, etc..)

  3. #3
    Expert confirmé 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
    Par défaut
    Si les heures concernent toujours la même journée déclarez les zones en Number(5) et utiliser To_Number(To_char(sysdate,'SSSSS')), cad seconds après minuit. Sinon utilisez deux colonnes de type date ou une date et un intervalle.

  4. #4
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut
    Merci pour la réponse.
    Effectivement, chaque solution a ses inconvénients. Effectivement toutes les dates et heures sont stockées au format timestamp.
    Je ne fais pas de calcul, juste saisie et affichage.

    Je pense donc opter pour un char ou varchar2 avec gestion des exceptions :
    Erreur SQL : ORA-01851: minutes must be between 0 and 59
    01851. 00000 - "minutes must be between 0 and 59"
    et
    Erreur SQL : ORA-01850: hour must be between 0 and 23
    01850. 00000 - "hour must be between 0 and 23"

    Pour la récupération des données je passerai par to_char(heuredebut,'HH24:MI')

    Merci de me signaler si ce n'est pas bon !
    Cordialement

  5. #5
    Expert confirmé 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
    Par défaut
    Non, ce n'est pas bon. Stocker des dates et affichez l'heure via To_Char.

  6. #6
    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
    Je ne suis pas aussi catégorique que mnitu, avec une bonne contrainte on peut stocker des heures / minutes en varchar sans soucis :
    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 table t_heure
    (
        heure varchar2(5) not null
      , constraint ck_heure_fmt
          check (to_date('19000101' || heure, 'yyyymmddhh24:mi') >= date '1900-01-01')
    );
    -- table créée.
     
    insert into t_heure (heure) values ('12:34');
    -- 1 ligne insérée.
     
    insert into t_heure (heure) values ('12:61');
    -- ORA-01851: les minutes doivent être comprises entre 0 et 59
     
    insert into t_heure (heure) values ('27:12');
    -- ORA-01850: les heures doivent être comprises entre 0 et 23

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/02/2011, 23h36
  2. Réponses: 11
    Dernier message: 01/02/2011, 15h20
  3. Réponses: 14
    Dernier message: 29/07/2008, 12h33
  4. Nom d'une variable passée en paramètre à une fonction
    Par cata2 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 07/09/2007, 09h17
  5. passage de paramètre à une fonction passée en paramètre
    Par bambou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/08/2007, 10h39

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