Я бы предложил вам создать функцию, которая возвращает логический или - как в моем примере - символ (Y - да, он действителен; N - нет, он недействителен) (почему символ? Вы можете используйте такую функцию в SQL. Boolean работает в PL / SQL, но мой пример - чистый SQL).
Полагаю, это не идеально , но должно быть намного лучше, чем просто проверять, содержит ли введенная кем-то строка обезьяна (@).
SQL> create or replace
2 function f_email_valid (par_email in varchar2)
3 return varchar2
4 is
5 begin
6 return
7 case when regexp_substr (
8 par_email,
9 '[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}')
10 is not null
11 or par_email is null then 'Y'
12 else 'N'
13 end;
14 end f_email_valid;
15 /
Function created.
SQL>
Поскольку пользователь может ввести несколько адресов электронной почты, разделенных запятой, вам придется разбить их на строки и затем проверить каждый из них. Посмотрите:
SQL> with test (text) as
2 -- sample data
3 (select 'littlefoot@gmail.com,bigfootyahoo.com,a@@hotmail.com,b123@freemail.hr' from dual),
4 split_emails as
5 -- split that long comma-separated values column into rows
6 (select regexp_substr(text, '[^,]+', 1, level) email
7 from test
8 connect by level <= regexp_count(text, ',') + 1
9 )
10 -- check every e-mail
11 select email, f_email_valid(email) is_valid
12 from split_emails;
EMAIL IS_VALID
------------------------------ --------------------
littlefoot@gmail.com Y
bigfootyahoo.com N
a@@hotmail.com N
b123@freemail.hr Y
SQL>