john.d495 Ответов: 2

Как заменить доменное имя электронной почты


Я пытаюсь написать процедуру, которая обновляет домен электронной почты (пример: преобразование Email123@gmail.com в Email123@hotmail.com когда я передаю 2 строки gmail.com и еще hotmail.com). У меня должен быть курсор в моей процедуре
create of replace procedure pr_update_email
(Old_Email Varchar2, New_Email Varchar2)
    As
    V_OldDomain Varchar2(50);
      Cursor C_Domains IS Select Email_Address
                From Customer
                where Email_Address Like '%@'||Old_Email;       
          Begin
          Open C_Domains;
          Fetch C_Domains INTO V_OldDomain; 
          While C_Domains %Found loop
                    Update Customer
                    Set Email_Address = regexp_replace(Email_Address, '^(.*@.*)'||Old_Email||'\1'||New_Email)
                    WHERE Email_Address LIKE V_OldDomain;   
          Fetch C_Domains into New_Email;
          End Loop;
  Close C_Domains;
End pr_update_email;
/
Show Errors;


получение ошибок: 19/11 PL/SQL: оператор SQL игнорируется

19/32 PLS-00403: выражение' NEW_EMAIL ' не может быть использовано в качестве целевого объекта оператора SELECT/FETCH

Что я уже пробовал:

я не знаю, что делать.
я действительно застрял.

2 Ответов

Рейтинг:
2

Richard Deeming

Цитата:
Fetch C_Domains INTO V_OldDomain;
...
Fetch C_Domains into New_Email;
Мне кажется, что это твой второй ребенок. Fetch нацелен не на ту переменную.

Я бы также задался вопросом, почему вы утверждаете, что вам нужен курсор, когда вы могли бы сделать это с помощью одного UPDATE заявление:
UPDATE Customer
SET Email_Address = regexp_replace(Email_Address, '^(.*@.*)'||Old_Email||'\1'||New_Email)
WHERE Email_Address Like '%@'||Old_Email;


Maciej Los

Правильная заключительная нота!

Рейтинг:
0

Maciej Los

Сообщение об ошибке кажется совершенно ясным...

Более подробную информацию вы найдете здесь: PLS-00001 к PLS-01919[^]

PLS-00403: expression 'string' cannot be used as an INTO-target of a SELECT/FETCH statement

    Cause: A FETCH statement was unable to assign a value to an assignment target in its INTO list because the target is not a legally formed and declared variable. For example, the following assignment is illegal because 'Jones' is a character string, not a variable: FETCH my_cur INTO 'Jones';

    Action: Check the spelling and declaration of the assignment target. Make sure that the rules for forming variable names are followed.