【问题标题】:concatenated with default string ( Procedure Oracle )与默认字符串连接(过程 Oracle)
【发布时间】:2017-03-11 04:45:30
【问题描述】:

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

a) firstname 的第一个字母与 lastname 连接(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;

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

【问题讨论】:

  • Ed O’Neill 这样的名字会发生什么?
  • 我在这种情况下不工作。顺便说一句,在我的国家只是流行的名字。 @WernfriedDomscheit
  • 如果你有两个“彼得·史密斯”会怎样?
  • 如果出现两个相同的电子邮件,则使用两个首字母代替名字中的一个字母(Dan Smilze - - > DaSmilze); @WernfriedDomscheit
  • 如果你有 4 个 Dan Smilze 会怎样?

标签: sql-server oracle stored-procedures procedure concat


【解决方案1】:

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

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

【讨论】:

  • 非常感谢您的帮助 :)))。我会测试它。
猜你喜欢
  • 2023-04-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2013-12-14
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多