2014-11-05 1 views
1
The problem here is I want to update the email ids, I want to update like [email protected] to [email protected] 

Я выбранные адреса электронной почты всех, как это,как заменить все записи электронной почты идентификационного прогресса 4GL

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

Я не могу использовать функцию замены, так как каждый электронной почту идентификаторы будут иметь разные длина. Возможно ли изменить идентификаторы электронной почты, как это? Пожалуйста, поделитесь со мной.

ответ

0

Замена точно «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. 

Но, может быть, вам нужно разработать свой вопрос или это все, что вы хотите сделать?

О выполнении

Этот запрос обыкновение очень быстро. Матчи не используют никаких индексов, поэтому вся таблица будет отсканирована. В более поздних версиях Progress вы можете добавить опцию TABLE-SCAN. Это увеличит скорость, но не на много. Если вы сделаете это, вы должны будете удалить выражение спичек в запросе и сделать так:

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

Если это один раз вещь, чтобы исправить адреса электронной почты, может быть, не нужно быть, что быстро ? Если нет, я предлагаю добавить логическое поле в таблицу (table.fixed) и создать индекс с полем в нем. Затем вы можете очень быстро пройти все нефиксированные записи.

+0

Да, это то, что я хочу точно, спасибо :-) – user2112700

+0

Я просто заменил его так: – user2112700

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

Так как вы сканируете всю таблицу (МАТЧИ не используют какой-либо индекс), она будет медленной. Если вы используете более новую версию Progress, вы можете добавить TABLE-SCAN в конце FOR EACH, но это не будет иметь большого значения! – Jensd