2016-10-28 7 views
1

Я новичок в Oracle. В таблице есть первое имя и фамилия (электронная почта пуста). Мой вопрос состоит в том, чтобы написать PL/SQL (Процедура) с этими требованиями., связанный с строкой по умолчанию (процедура Oracle)

a) первая буква от первого имени соединена с именем (Dan Smilze - -> DSmilze);

b) все акценты удалены (ä - -> a, ö - -> o, ...);

c) если появляются два одинаковых письма, вместо одной буквы от имени 2 используются первые буквы (Дэн Смилзе - -> DaSmilze);

е) Имя пользователя объединяется с «@ gmail.com»

Результат должен быть:

FIRSTNAME  LASTNAME EMAIL 

Dan   Smilze  [email protected] 
Ceo   Jürisoo  [email protected] 

Мой код:

CREATE OR REPLACE PROCEDURE merge_email 
IS 
BEGIN 
UPDATE emails set Email = (select CONCAT(substr(firstname,1,1),convert(lastname,'US7ASCII')) from email_lphanvan); 
END merge_email; 

Я знаю, что мой код не был достаточно и что-то неправильно. Можете ли вы помочь мне понять эту процедуру? Спасибо огромное!

+0

Что происходит с такими именами, как 'Ed O'Neill'? –

+0

В этом случае я не работаю. Просто популярные имена в моей стране кстати. @WernfriedDomscheit –

+1

Что произойдет, если у вас есть два «Питер Смит»? –

ответ

0

Извините, что вам пришлось долго ждать. Это не самое хорошее решение, но оно работает:

create table emails (name varchar2(20), surname varchar2(20), email varchar2(40)); 
insert into emails values ('Jan', 'Kowalski',''); 
insert into emails values ('Jan', 'Nowak',''); 
insert into emails values ('Jan', 'Ścigalski',''); 
insert into emails values ('Stefan', 'Kowalski',''); 
insert into emails values ('Stefan', 'Kowalski',''); 
insert into emails values ('Stefan', 'Kowalski',''); 
insert into emails values ('Józef', 'Błazen',''); 
insert into emails values ('Jan', 'Nowak',''); 
commit; 

begin 
for x in (select rowid, name, surname, row_number() over (partition by name, surname order by name) r from emails) loop 
UPDATE emails set Email = convert(substr(x.name,1,x.r),'US7ASCII') || convert(x.surname,'US7ASCII') || '@gmail.com' where rowid = x.rowid; 
end loop; 
commit; 
end; 
/

Если у вас есть id в таблице, пожалуйста, используйте id вместо rowid.

+0

Большое вам спасибо за вашу помощь :))). Я проверю это. –

 Смежные вопросы

  • Нет связанных вопросов^_^