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 :

Vérification d'une chaine de caractères


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
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut Vérification d'une chaine de caractères
    Bonjour
    J'ai déclaré une variable dans ma procédure pl/sql (oracle 10g) que j'alimente à partir d'une donnée d'un curseur :
    myVar varchar2(10);
    Je souhaiterais tester d'abord que ma chaine fait bien 10 caractères et ensuite que mes 5 premiers caractères sont uniquement alphanumériques et les 5 suivants uniquement numériques
    ex
    XXXX123 : non OK
    XXXXX12345 : OK
    XX-AA12345 : non OK
    XXXXX12A45 : non OK
    etc...
    J'ai bien trouvé sur le net la fonction owa_pattern mais j'ai du mal à la mettre en oeuvre

    Merci de votre aide
    Cordialement

  2. #2
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,

    Tu peux utiliser les expressions régulières pour valider ta chaine :
    Code sql : 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
    18
    19
    20
    DECLARE
      vl_ma_chaine VARCHAR2 (50);
    BEGIN
      vl_ma_chaine := 'aZERT12345';
      IF REGEXP_LIKE(vl_ma_chaine, '[A-Z]{5}[0-9]{5}', 'i') THEN
        DBMS_OUTPUT.PUT_LINE (vl_ma_chaine || ' : OK');
      ELSE
        DBMS_OUTPUT.PUT_LINE (vl_ma_chaine || ' : KO');
      END IF;
     
      vl_ma_chaine := 'A12345';
      IF REGEXP_LIKE(vl_ma_chaine, '[A-Z]{5}[0-9]{5}', 'i') THEN
        DBMS_OUTPUT.PUT_LINE (vl_ma_chaine || ' : OK');
      ELSE
        DBMS_OUTPUT.PUT_LINE (vl_ma_chaine || ' : KO');
      END IF;
    END;
    /
    aZERT12345 : OK
    A12345 : KO
    5 caractères alphanumériques ([A-Z]{5}) puis 5 chiffres ([0-9]{5}), le tout en ignorant la casse ('i').

  3. #3
    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
    Sans les regexp, et en SQL
    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
    18
    19
    20
      WITH t AS (SELECT 'aZERT12345' AS v FROM dual
      				UNION ALL   SELECT  'XXXX123' AS v FROM dual
              UNION ALL   SELECT  'XXXXX12345' AS v FROM dual
              UNION ALL   SELECT  'XX-AA12345' AS v FROM dual
              UNION ALL   SELECT  'XXXXX12A45' AS v FROM dual
              )
      SELECT  v, LENGTH(v) verif_l10, LENGTH(RTRIM(v, '0123456789')) verif_55, 
      				TRANSLATE(UPPER(RTRIM(v, '0123456789')), '0ABCDEFGHJIJKLMNOPQRSTUVWXYZ','0') verif_carac,
              CASE WHEN LENGTH(v) = 10 AND LENGTH(RTRIM(v, '0123456789')) = 5 
              	AND TRANSLATE(UPPER(RTRIM(v, '0123456789')), '0ABCDEFGHJIJKLMNOPQRSTUVWXYZ','0') IS NULL THEN 'OK'
                ELSE 'KO' END
                AS ok_5car_5num
      FROM t
     
    V	VERIF_L10	VERIF_55	VERIF_CARAC	OK_5CAR_5NUM
    aZERT12345	10	5		OK
    XXXX123	7	4		KO
    XXXXX12345	10	5		OK
    XX-AA12345	10	5	-	KO
    XXXXX12A45	10	8	12	KO
    ce qui donne en PL/SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
    	v VARCHAR2(15) := 'XX-AA12345';
    BEGIN
    	IF LENGTH(v) = 10
    	AND LENGTH(RTRIM(v, '0123456789')) = 5
      AND TRANSLATE(UPPER(RTRIM(v, '0123456789')), '0ABCDEFGHJIJKLMNOPQRSTUVWXYZ','0') IS NULL 
      THEN 	
      	Chaine OK
      ELSE
      	Chaine KO
      END IF;
    END;

  4. #4
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Tu peux aussi utiliser REGEXP_LIKE avec un CASE dans une requête SQL.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. [WD14] Vérification d'une chaine de caractère
    Par pixel016 dans le forum WinDev
    Réponses: 4
    Dernier message: 25/02/2011, 09h50
  3. vérification de la longueur d'une chaine de caractère
    Par midodido123 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 04/08/2009, 10h24
  4. vérification de la longeur d'une chaine de caractère
    Par youcef_b_dz dans le forum Delphi
    Réponses: 5
    Dernier message: 23/08/2006, 15h51
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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