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 :

To_char(SYSDATE, 'DAY') like 'MARDI'


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 125
    Par défaut To_char(SYSDATE, 'DAY') like 'MARDI'
    Bonjour, j'ai un code pour mon trigger (sous Oracle) dans lequel je souhaite interdire les transactions sur la table MENU, le jour de Mardi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create or replace trigger ST_B_DIU_MENU
    before delete or insert or update on MENU
     
    begin
     
    if to_char(SYSDATE, 'DAY') like 'MARDI' then
     
     raise_application_error(-20690, 'Impossible à cette heure: ' || to_char(SYSDATE, 'DAY HH:MM:SS'));
     
    end if;
     
    end ST_B_DIU_MENU;
    Après plusieurs tests, la condition n'est jamais vérifiée, alors que lorsque je teste la date :

    > select to_char(SYSDATE, 'DAY') from dual
    MARDI
    Je ne vois vraiment pas.

    Merci beaucoup.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Par défaut
    Si tu regardes la chaine exacte retournée (chez moi du moins) c'est 'MARDI ' avec 3 espaces à la fin.
    Le LIKE employé tout seul fait la même chose qu'un = j'ai l'impression. Il faut que tu écrives LIKE 'MARDI%', le % est le symbole pour dire "n'importe quel(s) caractère(s)"

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Par défaut
    Cela dit à ta place je testerais plutôt le numéro du jour dans la semaine :

    "D : N° du jour dans la semaine (par exemple Lundi =1, Mardi =2, etc...) Attention la notation peut changer en fonction de vos paramètres NLS."

    Fais juste attention si ta semaine commence lundi ou dimanche...

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Ou alors, utiliser le format fmDAY qui supprime les espaces superflus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To_Char(sysdate, 'fmDAY')

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Par défaut Re: To_char(SYSDATE, 'DAY') like 'MARDI'
    Fais également attention d'avoir le même NLS_LANG sur ton poste et sur ton serveur de BDD !

    En FRENCH, le select te renvoie MARDI
    En AMERICAN, le select te revoie TUESDAY

    Or, si ton poste est en FRENCH, et que ta BDD est en AMERICAN, alors quand ton trigger se déclenche, il te renvoie TUESDAY et non pas MARDI, et donc, ta condition ne sera jamais vérifiée !

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Citation Envoyé par TeamArkadia Voir le message
    Or, si ton poste est en FRENCH, et que ta BDD est en AMERICAN, alors quand ton trigger se déclenche, il te renvoie TUESDAY et non pas MARDI, et donc, ta condition ne sera jamais vérifiée !
    C'est faux. Si le client définit NLS_LANG alors les paramètres NLS définis côté serveur -dans le fichier d'initialisation- NE sont PAS pris en compte):

    The language and territory components of the NLS_LANG parameter determine the default values for other detailed NLS parameters, such as date format, numeric characters, and linguistic sorting.

Discussions similaires

  1. Alias dynamique avec sysdate - n days dedans
    Par lbar012001 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/03/2014, 15h39
  2. Comparaison avec to_char(x.date,'Day')
    Par uNreal dans le forum SQL
    Réponses: 8
    Dernier message: 06/06/2012, 11h11
  3. Pb config Client avec TRUNC(SYSDATE,'DAY')
    Par GAEREL dans le forum SQL
    Réponses: 3
    Dernier message: 07/09/2010, 09h09
  4. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23
  5. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10

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