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 :

Fonction qui vérifie qu'une chaine de caractères est une date


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Fonction qui vérifie qu'une chaine de caractères est une date
    Bonjour,

    je dois créer une fonction qui vérifie qu'une chaine de caractère est en format date et si oui lui formater son affichage.
    Voici ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create or replace function format_date(date1 date,date2 date,date3 date,longueur varchar) return date is
    begin
     declare
       x:=longueur(8)
             if longueur(8) then return date1(to_date('YYYYMMDD')	
    		  else if longueur (12) then return date2(to_date('YYYYMMDDHHMI')
    		      else if longueur (14) then return date3(to_date('YYYYMMDDHHMISS')
    		          else return null
    				end if;
    			end if;	
    		end if;
    return date ;
    end;
    end format_date;
    toutefois la suite de if else dérange !!
    Merci d'avance de l'aide que vous m'apporterez

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est quoi ce pseudo code ?
    Ensuite tu passes des dates en paramètre, alors que tu devrais passer une chaine non ?
    Ensuite une date n'a pas de format, donc si ta fonction renvoie une date, il n'y a pas de format.

    Donc ce n'est pas vraiment clair l'histoire de la vérif de date + reformattage.

    Dernière chose : ELSIF existe en pl/sql

    Voici un code qui teste une chaine et renvoie la 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
    CREATE OR REPLACE FUNCTION format_date(v_chaine_date VARCHAR2(14),longueur NUMBER) 
    RETURN DATE 
    IS
    	v_date DATE:
    BEGIN
    		IF LENGTH(v_chaine_date) = 8	THEN v_date :=  TO_DATE(v_chaine_date, 'YYYYMMDD');	
    		ELSIF LENGTH(v_chaine_date) = 12	THEN v_date :=  TO_DATE(v_chaine_date, 'YYYYMMDDHHMI');	
    		ELSIF LENGTH(v_chaine_date) = 14	THEN v_date :=  TO_DATE(v_chaine_date, 'YYYYMMDDHHMISS');	
    		ELSE RETURN NULL;
    		END IF;
    		RETURN v_date;
    EXCEPTION 
    WHEN OTHERS THEN RETURN NULL; -- pas un format date
    END format_date;

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    C'est pas plus simple de faire un TO_DATE et gérer l'exception OTHERS ou, plus propre, toutes les exceptions relatives à une erreur sur TO_DATE ?

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    C'est ce que fait Mcm.
    Sauf qu'en paramètre de to_date, tu dois passer le format de la chaine de caractères (ex. YYYYMMDD) qui oblige donc à faire un test sur la taille de cette chaine.
    Si tu regardes son code, après avoir vérifié la taille, il fait bien un to_date et récupère l'exception comme tu le conseilles

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/11/2012, 12h04
  2. passer une chaine de caractères dans une fonction
    Par Morgatte dans le forum C++/CLI
    Réponses: 3
    Dernier message: 14/02/2012, 19h05
  3. Réponses: 2
    Dernier message: 06/07/2011, 16h31
  4. Réponses: 2
    Dernier message: 03/05/2010, 16h11
  5. Réponses: 1
    Dernier message: 05/11/2009, 15h19

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