如何用进度4gl替换所有电子邮件ID记录

时间:2014-11-05 10:48:19

标签: progress-4gl openedge

The problem here is I want to update the email ids, I want to update like user@abc.com to user@xyz.com 

我选择了所有这样的电子邮件ID

for each table where 
 table.email matches "*" + "@abc.com" + "*" no-lock :
    Display

我无法使用替换功能,因为每个电子邮件ID都有不同的长度。  是否可以更改这样的电子邮件ID?请与我分享。

2 个答案:

答案 0 :(得分:0)

准确地替换" abc"与" xyz"是这样做的:

/* You need to change NO-LOCK to EXCLUSIVE-LOCK if you want to update or change! */
FOR EACH table WHERE table.email MATHES"*" + "@abc.com" + "*" EXCLUSIVE-LOCK:
  ASSIGN
    table.email = REPLACE(table.email, "@abc.com", "@xyz.com").
END.

但也许你需要详细说明你的问题,或者这就是你想做的一切?

关于效果

此查询不会非常快。匹配不使用任何索引,因此将扫描整个表。 在更高版本的Progress上,您可以添加TABLE-SCAN选项。这会提高速度但不会增加很多。如果这样做,您将不得不删除查询中的MATCHES表达式,并执行以下操作:

FOR EACH table EXCLUSIVE-LOCK TABLE-SCAN:
  IF table.email MATCHES etcetera
  END.
END.

如果这是一次修复电子邮件地址的事情,也许它不需要这么快?如果不是,我建议您向表中添加一个逻辑字段(table.fixed)并创建一个包含该字段的索引。然后你可以非常快速地浏览所有未修复的记录。

答案 1 :(得分:0)

我试过自己,我写得像这样,而且有效。

def var cmail1 as char.
def var cmail2 as char.
assign
cmail1 = "@abc.com"
cmail2  = "@xyz.com".



for each table where
exclusive-lock :
Assign
table.email = REPLACE(table.email, cmail1, cmail2).

但性能很低。如果您有任何替代方案,请发布。