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

相關問題