与默认字符串连接(Procedure Oracle)

concatenated with default string ( Procedure Oracle )

我是 Oracle 的新手。 table 包含名字和姓氏(电子邮件为空)。我的问题是根据这些要求编写 PL/SQL( Procedure )。

a) 名字的首字母与姓氏连接(Dan Smilze - - > Dsmilze);

b) 删除所有重音符号 (ä - - > a, ö - - > o, …);

c) 如果出现两封相同的电子邮件,则使用 2 个第一个字母代替名字中的一个字母 (Dan Smilze - - > DaSmilze);

e) 用户名​​与“@gmail.com”连接

结果应该是:

FIRSTNAME     LASTNAME    EMAIL

Dan           Smilze      DSmilze@gmail.com
Ceo           Jürisoo     CJurisoo@gmail.com

我的代码是:

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;

我知道我的代码还不够,而且不知何故是错误的。你能帮我理解这个程序吗?非常感谢!

抱歉让您久等了。这不是最好的解决方案,但它有效:

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;
/

如果您在 table 中有任何 id,请使用 id 而不是 rowid