oracle явный цикл курсора - PullRequest
       5

oracle явный цикл курсора

0 голосов
/ 26 февраля 2020

Я хочу заменить имя домена с помощью курсора без al oop, который является явным курсором. но я также хочу изменить все те же доменные имена в базе данных, передавая строку. пример: exe c PR_Q3 («usa.com», «hotmail.com»); все доменное имя с базой данных «usa.com» изменится на «hotmail.com».

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;

работает, если я удаляю l oop, но меняет имя домена только один раз. Мне нужны изменения все того же доменного имени. Я хочу сделать то же самое без al oop. Можно я?

1 Ответ

2 голосов
/ 26 февраля 2020

Вы можете использовать следующие простые update в вашей процедуре:

CREATE OR REPLACE PROCEDURE PR_Q3 (
    OLD_EMAIL   IN          VARCHAR2,
    NEW_EMAIL   IN          VARCHAR2
)
    AUTHID CURRENT_USER
IS
BEGIN
    UPDATE BROKER
    SET
        EMAIL_ADDRESS = REPLACE(EMAIL_ADDRESS, OLD_EMAIL, NEW_EMAIL)
    WHERE
        REGEXP_LIKE ( EMAIL_ADDRESS,
                      '.*@' || OLD_EMAIL || '$' );

    COMMIT;
END PR_Q3;
/

Приветствия !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...