与默认字符串连接(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
。
我是 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
。