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 :

[PL/SQL] Heure d'été / Heure d'hiver


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Points : 40
    Points
    40
    Par défaut [PL/SQL] Heure d'été / Heure d'hiver
    Bonjour,

    J'ai besoin dans une fonction PL/SQL de savoir si on est en heure d'été ou en heure d'hivers, existe t-il une fonction qui permet de determiner avec PL/SQL ou Oracle?
    Merci pour votre aide

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Pas à ma connaissance, mais il suffit de tester si tu es entre le dernier dimanche de mars et le dernier dimanche d'octobre.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Une date ? ou un TIMESTAMP WITH LOCAL TIME ZONE ?

    http://www.dbasupport.com/oracle/ora9i/TimeZone.shtml

    [edit]donc, oui, c'est possible !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select SESSIONTIMEZONE from dual;
    par contre, cela nécessite de configurer configurer correctement la base, et après, on saura déterminer l'offset avec le GMT
    [/edit]

    [edit #2]
    A ce sujet, quand vous développez, n'utilisez SYSDATE que si vous voulez réellement l'heure locale où se trouve votre serveur; si vous voulez avoir l'heure (locale), utilisez CURRENT_DATE.
    Vous ne savez pas si votre appli ne sera pas déployée sur un serveur au Japon, ou si tout simplement pour éviter les problèmes de changements d'heures, tous les serveurs sont bloqués sur l'heurre GMT.

    Ou si votre appli ne sera pas déployée partout dans le monde... (et la gestion des heures sup' en heures de Singapour pour un salarié en France, ça le fera moyen).

    Il suffit d'utiliser les outils qu'Oracle met à disposition !

    Note metalink 149118.1
    [/edit #2]

  4. #4
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Merci bien pour votre aide, c'est ce que je cherchais.

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Intéressant.

    Leo, peux-tu développer le sessiontimezone, il me ramène systèmatiquement 0. De plus je ne vois pas comment obtenir pour une date stockée dans la base si je suis en heure d'hiver ou d'été à partir de cette info.

    Petite précision quant au current_date, il n'est dispo qu'à partir de la 9i.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut Explication sur les TIME ZONE
    Pour commencer, tout ceci n'est valable qu'à partir de la 9i et nécessite d'utiliser des TIMESTAMP en lieu et place des DATE.

    Dans l'exemple ci-dessous, on a :
    • La base dans le fuseau GMT
    • L'utilisateur (OS) "leo" à GMT+2
    • L'utilisateur (OS) "anderson" à GMT-7
    • Un seul utilisateur (oracle) "leo" mais on pourrait en avoir plusieurs, ça changerait rien.


    Je définis ma DB comme étant à l'heure GMT (C'est ce qu'il y a de plus simple pour tout le monde, GMT étant la référence; mais ça marche aussi avec un offset de -6h).
    Soit je le fais à la création, soit après.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> ALTER DATABASE SET TIME_ZONE='00:00';
     
    Database altered.
     
    SQL> SELECT dbtimezone FROM DUAL;
     
    DBTIME
    ------
    +00:00
    Mon utilisateur OS leo a dans son .profile un positionnement permanent à GMT+2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export ORA_SDTZ='+02:00'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> create table leo.test_tz (col timestamp with local time zone, col2 timestamp with time zone, col3 date);
    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
    SQL> insert into leo.test_tz (col, col2, col3)
      2  values (current_date, current_date, sysdate);
     
    1 row created. 
     
    SQL> select * from test_tz;
     
    COL
    ---------------------------------------------------------------------------
    COL2
    ---------------------------------------------------------------------------
    COL3
    -------------------
    18-APR-07 06.24.02.000000 PM
    18-APR-07 06.24.02.000000 PM +02:00
    18/04/2007 18:24:02
    on commence déjà à voir la différence entre with time zone et with local time zone !


    prenons maintenant mon utilisateur Anderson à New-York (GMT-7)
    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
    [anderson@localhost ~]$ export ORA_SDTZ='-07:00'
    [anderson@localhost ~]$ sqlplus leo
     
    SQL*Plus: Release 10.2.0.1.0 - Production on Wed Apr 18 18:28:02 2007
     
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
    Enter password: 
     
    Connected to:
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
     
    SQL> select sessiontimezone from dual;
     
    SESSIONTIMEZONE
    ---------------------------------------------------------------------------
    -07:00
    quelles sont les donnée qu'il voit dans la table test_tz :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select * from test_tz;
     
    COL
    ---------------------------------------------------------------------------
    COL2
    ---------------------------------------------------------------------------
    COL3
    -------------------
    18-APR-07 09.24.02.000000 AM
    18-APR-07 06.24.02.000000 PM +02:00
    18/04/2007 18:24:02
    Donc le WITH TIME ZONE donne l'heure pour la personne qui fait l'opération et ce, quel que soit le fuseau horaire initial
    WITH LOCAL TIME ZONE, c'est l'heure locale + le fuseau horaire ce qui permet d'en déduire l'heure locale correpondant à un autre endroit du globe
    et une date, on n'a pas la notion de fuseau horaire et donc on mélange des heures "JAPON" avec des heures "FRANCE" ! :-S

    Donc, je concluerais en disant que cette histoire de TZ est très importante car c'est une puissance et une souplesse totale mais qu'elle est malheureusement pas assez utilisée car peu de développeurs la connaissent.

    Toute la doc : http://download-uk.oracle.com/docs/c....htm#sthref531

    [edit]
    Pour en revenir à la question initiale de changement d'heure été/hiver, Oracle intègre parfaitement (*) ça. (cf § Support for Daylight Saving Time)

    (*) Enfin, quand il n'y a pas de bug dans les algos Sun ni que Bush ne change la date de changement d'heure !
    http://www.oracle.com/technology/pub...ate-guide.html

    Donc, oui, ça complexifie forcément un peu le dév. mais ça peut vous éviter de devoir réécrire toute votre application parce que le serveur sera déployer au siège social, c'est à dire San Fransisco !
    [/edit]

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Très intéressant. Merci Leo pour cette explication très claire et très bien illustrée.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    A propos des explications de Léo Anderson au sujet du SESSIONTIMEZONE, Lorsque il y a inscrit SQL> avant la ligne de code, cela signifie-t-il que ce code est tapé dans SQLplus ?

    Merci beaucoup,
    OS : LinuxMint 20

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

Discussions similaires

  1. [2008] Conversion heure UTC en heure locale avec horaires été hiver
    Par PapouDomi dans le forum Développement
    Réponses: 5
    Dernier message: 09/07/2015, 18h48
  2. [SQL] Comment recupérer l'heure de ma date
    Par marvelromy dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/01/2008, 15h25
  3. [SQL] Comparaison heure PHP et heure SQL
    Par mello dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 13/11/2007, 17h33
  4. [Pl/Sql] Trigger et date, heure system
    Par brigadier dans le forum Oracle
    Réponses: 7
    Dernier message: 03/08/2006, 12h34
  5. PL/SQL TYPE DE DONNEES HEURE
    Par mimi_été dans le forum PL/SQL
    Réponses: 3
    Dernier message: 18/10/2004, 16h33

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