2014-11-05 46 views

回答

0

与“XYZ”更换正是“ABC”像这样做:

/* 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. 

但也许你需要详细说明您的问题或为这一切你想做的事?

关于绩效

这个查询不会非常快。匹配不使用任何索引,因此整个表格将被扫描。 在更高版本的进度上,您可以添加TABLE-SCAN选项。这会提高速度,但不是很多。如果你这样做,你将不得不删除查询比赛表达,这样做:

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

如果这是一次性的东西来解决电子邮件地址也许并不需要那么快?如果没有,我建议你在表格中添加一个逻辑字段(table.fixed),并创建一个带有字段的索引。那么你可以快速浏览所有不固定的记录。

+0

是的,这是我想要的,谢谢:-) – user2112700 2014-11-05 15:25:07

+0

我刚刚将它替换成这样, – user2112700 2014-11-05 15:25:54

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). 

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

+0

由于您扫描整个表格(MATCHES不会使用任何索引),它会很慢。如果您使用更新版本的Progress,您可以在FOR EACH的末尾添加TABLE-SCAN,但它不会产生非常大的差异! – Jensd 2014-11-05 15:33:49