oracle sql - не имеет значения верхний или нижний курсор - PullRequest
0 голосов
/ 27 февраля 2020

введите доменное имя для поиска в базе данных, независимо от того, является ли имя домена верхним или нижним, если альфа совпадает.

пример. «hotmail.com» в базе данных, если я введу «hOTmAIL.Com». он все еще нашел доменное имя «hotmail.com».

cursor E_info is select Email_Address from broker
where REGEXP_LIKE (substr(Email_Address, instr(Email_Address,'@')+1), old_email);

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020
create or replace procedure PR_Q3
(old_email in varchar2, new_email in varchar2)
authid current_user
is 
cursor E_info is select Email_Address from broker
where REGEXP_LIKE (substr(Email_Address, instr(Email_Address,'@')+1), old_email);
v_email E_info%rowtype;
begin 
open E_info;
loop
fetch E_info into v_email;
exit when E_info%notfound;
update broker set 
Email_Address = replace(Email_Address,substr(Email_Address,instr(Email_Address,'@')+1),new_email) 
where Email_Address = v_email.Email_Address;
end loop;
close E_info;
end PR_Q3;
0 голосов
/ 27 февраля 2020

Вы можете сделать это без использования regexp_like.

Lower

select * from test where lower(substr(email_address,instr(email_address,'@')+1))=lower('HotMail.com');

Это вернет результаты быстрее по сравнению с regexp_like, поскольку вы делаете точное совпадение.

РЕДАКТИРОВАТЬ

create or replace procedure PR_Q3
(old_email in varchar2, new_email in varchar2)
authid current_user
is 
cursor E_info is select Email_Address from test where lower(substr(email_address,instr(email_address,'@')+1))=lower(old_email);
v_email E_info%rowtype;
begin 
open E_info;
loop
fetch E_info into v_email;
exit when E_info%notfound;
update test set 
Email_Address = replace(Email_Address,substr(Email_Address,instr(Email_Address,'@')+1),new_email) 
where Email_Address = v_email.Email_Address;
end loop;
close E_info;
end PR_Q3;
/
...