2016-10-28 108 views
1

我是Oracle的新手。在桌上有姓和名(電子郵件爲空)。我的問題是用這些要求編寫PL/SQL(Procedure)。 a)來自firstname的第一個字母與lastname連接(Dan Smilze - - > DSmilze); b)所有口音都被刪除(ä - - > a,ö - - > o,...); c)如果出現兩個相等的電子郵件,則使用第一個字母而不是第一個字母中的一個字母(Dan Smilze - - > DaSmilze);如果兩個電子郵件不同,與默認字符串連接(Procedure Oracle)

E)用戶名與「@ 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

非常感謝你的幫助:)))。我會測試它。 –