Почему вы используете cursor
? Он может быть обработан с помощью простого оператора update
.
Ваша процедура должна выглядеть следующим образом:
create procedure pr_update_email (p_oldemail in varchar2,
p_newemail in varchar2)
As
Begin
UPDATE BROKER
SET
EMAIL_ADDRESS = REPLACE(EMAIL_ADDRESS, p_oldemail, p_newemail)
WHERE
REGEXP_LIKE ( EMAIL_ADDRESS,'.*@'|| p_oldemail|| '$' );
Commit;
End;
/
Или, если вы действительно хотите использовать l oop, тогда
create of replace procedure pr_update_email
(Old_Email Varchar2, New_Email Varchar2)
As
Begin
For i in (Select Email_Address
From Customer
where Email_Address Like '%@'||Old_Email) loop
Update Customer
Set Email_Address = Replace(Email_Address, old_email, new_email)
WHERE Email_Address = i.Email_Address;
End Loop;
Commit;
End pr_update_email;
/
Чтобы вызвать эту процедуру, вам нужно передать оба домена следующим образом:
Begin
pr_update_email('gmail.com', 'hotmail.com');
End;
/
И да, проблема в вашем коде следующая строка:
Fetch C_Domains into New_Email;
New_Email
является входным параметром, и вы не можете назначить какое-либо значение входному параметру.
Cheers !!