Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проверка емайл пользователя regexp_like / 12 сообщений из 12, страница 1 из 1
27.02.2018, 14:27
    #39607888
Sweetira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
Добрый день.
Подскажите плиз как правильно решить такую задачу:

неактуальный пользователь, имеющая e-mail annak@ указывается как получатель документов, реальным получателем которых является e-mail jannak@
email_cb - это список всех адресов получателей документа (текстовое поле типа клоб)
osname - имя пользователя, может быть другое сочетание имени пользователя в дальнейшем

select * from email, empl
where upper(email.email_cb) like '%' || upper(trim(empl.osname)) || '@' || '%'

В строке со всеми емайлами email_cb проверить есть ли перед osname пробелы, знаки пунктуации ( , ; '')
regexp_like( upper(email.email_cb), '[^ [:space:] [:punct:]]')

можно это решить с помощью регулярнового выражения? Как правильно это записать?
...
Рейтинг: 0 / 0
27.02.2018, 14:54
    #39607908
lpadла
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
Sweetiraможно это решить с помощью регулярнового выраженияс помощью микроскопа и такой-то матери можно многое решить. только вот что именно?
...
Рейтинг: 0 / 0
06.03.2018, 18:49
    #39611442
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
Sweetira,

Давай-ка попробуем еще раз и на этот раз русским языком.
У тебя есть таблица актуальных пользователей:
Код: plaintext
1.
2.
3.
empl
id      number
osname  varchar2

У тебя есть таблица документов и всех получателей документов
Код: plaintext
1.
2.
email
doc_id    number 
email_cb  clob

В которой в поле email_cb через разделитель содержит всех получателей документа, например
Код: plaintext

Тебе нужно из поля email_cb найти всех пользователей, у которых первая часть имени до @ соответсвует записи из таблицы empl.osname?
...
Рейтинг: 0 / 0
07.03.2018, 11:15
    #39611706
Sweetira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
feagor,
да так.
...
Рейтинг: 0 / 0
07.03.2018, 11:48
    #39611728
instr like
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
Код: sql
1.
2.
3.
4.
5.
6.
7.
empl
id      number
osname  varchar2 -- vasya.pupkin 

select * 
from daual
 where instr('vasya.pupkin@company.com, jannak@company.com','vasya.pupkin'||'@') > 0
...
Рейтинг: 0 / 0
07.03.2018, 12:33
    #39611762
feagooor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
Sweetira,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with empl as(
select 'jannak' osname from dual
union all
select 'vasya.pupkin' osname from dual
union all
select 'an23_us' osname from dual),
email as (
select 1 id,'jannak@company.com,annak@company.com,vasya.pupkin@mail.ru,an2_us@gmail.com' e_list from dual
)

,t as (
select 
  trim(regexp_substr(t.e_list, '[^,]+', 1, levels.column_value)) email
from 
  email t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.e_list, '[^,]+'))  + 1) as sys.OdciNumberList)) levels
)
SELECT * FROM t,empl
where regexp_replace(t.email,'@.+$')=empl.osname


Код: plaintext
...
Рейтинг: 0 / 0
07.03.2018, 14:43
    #39611866
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
feagooor,

А зачем эта конструкция из table(cast(multiset... ?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with empl as(
select 'jannak' osname from dual
union all
select 'vasya.pupkin' osname from dual
union all
select 'an23_us' osname from dual),
email as (
select 1 id,'jannak@company.com,annak@company.com,vasya.pupkin@mail.ru,an2_us@gmail.com' e_list from dual
)
,t as (
  select 
    trim(regexp_substr(t.e_list, '[^,]+', 1, level)) email
  from email t
  connect by regexp_substr(t.e_list, '[^,]+', 1, level) is not null
)
SELECT * FROM t,empl
where regexp_replace(t.email,'@.+$')=empl.osname
;
...
Рейтинг: 0 / 0
07.03.2018, 14:57
    #39611883
instr like
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
Понты
...
Рейтинг: 0 / 0
07.03.2018, 15:08
    #39611900
feagooor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
rpovarov,

первое что попалось по запросу list to table:)
...
Рейтинг: 0 / 0
07.03.2018, 16:00
    #39611927
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
rpovarov,

Не проще regexp_substr(str,'([^|,]+)@',1,level,'i',1) ?

.....
stax
...
Рейтинг: 0 / 0
27.03.2018, 10:11
    #39620944
Sweetira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
feagooor,

спасибо за помощь!
так работает быстро.
Можно попросить ссылку на инструкцию по table(cast(multiset(select level from dual connect by level?

с конструкцией connect by regexp_substr(t.e_list, '[^,]+', 1, level) is not null. даже по одной записи очень долго думает
...
Рейтинг: 0 / 0
27.03.2018, 10:12
    #39620946
Sweetira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка емайл пользователя regexp_like
rpovarov,

Спасибо за помощь,
но
с конструкцией connect by regexp_substr(t.e_list, '[^,]+', 1, level) is not null. даже по одной записи очень долго думает
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проверка емайл пользователя regexp_like / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]