Voici la syntaxe d'expression régulière pour une adresse e-mail, y compris les guillemets
'[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'
Vous pouvez donc utiliser regexp_like() dans une clause where ou regexp_substr() pour vérifier si votre champ contient une adresse e-mail valide. Voici un exemple - vous verrez que regexp_substr() renvoie NULL sur l'adresse manquant le .domain, ce qui échoue à la validation de la sous-chaîne. À partir de là, vous pouvez créer une contrainte de vérification autour d'elle ou l'appliquer à l'aide d'un déclencheur (beurk), etc.
SQL> desc email
Name Null? Type
----------------------------------------- -------- ----------------------------
EMAIL_ID NUMBER
EMAIL_ADDRESS VARCHAR2(128)
SQL> select * from email;
EMAIL_ID EMAIL_ADDRESS
---------- ----------------------------------------
1 [email protected]
2 [email protected]
3 [email protected]
4 [email protected]_domaindotorg
SQL> @qry2
SQL> column email_address format a40
SQL> column substr_result format a30
SQL> SELECT email_address
2 , regexp_substr(email_address,'[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}') substr_result
3 FROM email
4 /
EMAIL_ADDRESS SUBSTR_RESULT
---------------------------------------- ------------------------------
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected]_domaindotorg
En utilisant les mêmes données, voici une requête qui limite uniquement les adresses e-mail valides, en utilisant REGEXP_LIKE
SQL> column email_address format a40
SQL> column substr_result format a30
SQL> SELECT email_address
2 FROM email
3 WHERE REGEXP_LIKE (email_address, '[a-zA-Z0-9._%-][email protected][a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}');
EMAIL_ADDRESS
----------------------------------------
[email protected]
[email protected]
[email protected]
Recherchez la page de contenu de la SQL Reference pour regexp pour voir la prise en charge des expressions régulières.