Expression régulière sous oracle, pl / sql
Résolu
Nouvelle_Informaticienne
Messages postés
173
Statut
Membre
-
Nouvelle_Informaticienne Messages postés 173 Statut Membre -
Nouvelle_Informaticienne Messages postés 173 Statut Membre -
Bonjour
je veux faire une condition sur une sélection de mes données, je veux sélectionner les données qui respectent les contraintes suivantes:
j'ai commencé à le faire :
et après je me bloque !
si quelqu’un peut m'aider ou me filer un lien pour traduire mon texte en expression je serai reconnaissante
Je vous remercie
je veux faire une condition sur une sélection de mes données, je veux sélectionner les données qui respectent les contraintes suivantes:
- Uniquement des caractères suivants : [a .. z] + [A .. Z] + [0 .. 9] +[ _ ]
- Avec les restrictions suivantes :
•ne pas dépasser 128 caractères
•ne doit pas commencer par un chiffre
•ne peut avoir plusieurs caractères "blanc souligné" de suite
•le nom ne doit pas être un mot réservé de SQL
=> Autrement dit, les lettres accentuées (é à ù ï É ...), les "kanas" (ç œ ...), les caractères de ponctuation (, ; : ! ? ...) et autres caractères spéciaux, comme le blanc, sont proscrits.
j'ai commencé à le faire :
REGEXP_LIKE (COL_NOM_SQL, '^([a-z]*|[ _ ]' ...);
et après je me bloque !
si quelqu’un peut m'aider ou me filer un lien pour traduire mon texte en expression je serai reconnaissante
Je vous remercie
A voir également:
- Expression régulière sql
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Logiciel sql - Télécharger - Bases de données
- Blob sql ✓ - Forum Webmastering
- Requête sql pix - Forum Python
1 réponse
Bonjour,
En une seule expression rationnelle, ça peut être un peu compliqué, et pas facile à maintenir.
Par contre, comme si je l'imagine, tu es dans une clause WHERE, tu peux faire plusieurs expressions reliées par des AND. Cela pourrait avoir un coût en termes de performances, à toi de voir si c'est rédhibitoire.
L'avantage également, c'est de pouvoir utiliser NOT, pour les restrictions.
En décomposant dans le même ordre que tes points :
Pour la taille max, il y a sûrement une fonction plus simple que par expression rationnelle.
Pour les mots réservés SQL, je ne sais pas s'il y a une liste directement accessible en PL/SQL, et il faudrait aussi tester en passant la colonne en majuscules pour se départir des différences de casse.
En une seule expression rationnelle, ça peut être un peu compliqué, et pas facile à maintenir.
Par contre, comme si je l'imagine, tu es dans une clause WHERE, tu peux faire plusieurs expressions reliées par des AND. Cela pourrait avoir un coût en termes de performances, à toi de voir si c'est rédhibitoire.
L'avantage également, c'est de pouvoir utiliser NOT, pour les restrictions.
En décomposant dans le même ordre que tes points :
WHERE REGEXP_LIKE (COL_NOM_SQL, '^[a-zA-Z0-9_]*$') AND NOT REGEXP_LIKE (COL_NOM_SQL, '.{129}') AND NOT REGEXP_LIKE (COL_NOM_SQL, '^[0-9]') AND COL_NOM_SQL NOT LIKE '%__%' AND COL_NOM_SQL NOT IN ('SELECT', 'WHERE')...
Pour la taille max, il y a sûrement une fonction plus simple que par expression rationnelle.
Pour les mots réservés SQL, je ne sais pas s'il y a une liste directement accessible en PL/SQL, et il faudrait aussi tester en passant la colonne en majuscules pour se départir des différences de casse.
exactement je suis dans le WHERE , et j'ai fais plusieurs conditions sur 3 lignes , dans une seule regx ce n'est pas evident ! donc voici ce que j'ai fais
Merci encore :)