•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
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
[du code ]
where [...]
AND NOT EXISTS (SELECT 1 FROM V$RESERVED_WORDS WHERE COL_NOM_SQL = KEYWORD) -- ca c pour les mot reservés au SQL ca marche !
AND REGEXP_LIKE COL_NOM_SQL , '^[A-z_][A-z0-9_]{1,128}')) -- ca c est pour qu'il commence par une lettreou '_' et pas un nombre ou autre chose et ca marche aussi
AND COL_NOM_SQL NOT LIKE '%__%' -- => mais ca en fait je ne suis pas sure car il va accepté le mot suivant : 'TOTO____TOTO' quiest interdit : ( ne peut avoir plusieurs caractères 'blanc souligné' de suite)
...
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 :)