RU/2: Форум. Общие вопросы. : Чиним линки


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : oleandr
To : Igor Vaskov
Subj : Чиним линки

> Лень, конечно. Я Рекс не знаю. На нем никогда ничего серьезного не делал. Слабо представляю, как из него обращаться с MySQL (если знаешь, скажи - интересно - может пригодится когда-нибудь).
Все мануалы и библиотеки здесь rexxsql.sourceforge.net
Тебе нужны будут для MySQL - скачай их из раздела Download rxsql25_my_os2.zip
>
> Если есть желание поучить меня Рексу :) , пришли скрипт...

--- cut here ---
/* Рыба. Принцип прост
- выбираем из базы данные, содержащие подстроку string1
- заменяем string1 на string2 (допускается любое число замен) в
каждой записи
- апдейтим базу построчно
- если надо, то добавляем commit самостоятельно */
/****************************************************************/

call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
call RXFuncAdd 'SQLLoadFuncs','REXXSQL','SQLLoadFuncs'
call SqlLoadFuncs

/* здесь говорим что на что менять */

string1='old string'
string2='new string'
l=length(string1)

/* подключимся к БД как user/pass */

rc = sqlconnect("linkname","user","pass","DBname")

/* дальше готовим запросы для поиска и для замены в таблице website
содержимого столбца html, где есть искомые строки 'old string' */

query="select rowid, html from website where content like "||string1
upd="update website set html="||newdata||" where rowid=q1.rowid"

/* Если не выбрано, то */
If sqlcommand('q1',query) < 0 Then DO
rc=sqldisconnect("DBname")
Call SqlDropFuncs
Call SysDropFuncs
say "NO DATA"
exit
end

/* Заменяем строку на новую */
l=length(string1)
do j=1 to q1.rowid.0
newdata=''
i=1
do x=1
p=pos(string1,q1.html.j,i)
if p=0 then do
newdata=newdata||substr(q1.html.j,i)
leave
end
newdata=newdata||substr(q1.html.j,i,p-i)||string2
i=p+l
end
If sqlcommand('q2',upd) < 0 Then say error
end


rc=sqldisconnect("DBname")

Call SqlDropFuncs
Call SysDropFuncs
Drop q1,newdata,query,upd
exit

--- cut here ---

> Кстати, риски возникают, если этот скрипт обрушит что-то, восстанавливать придется со старого бэкапа.
Ну так попробуй на "кошке" - сделай новую таблицу create table xxx as select * from yyy where ...
, где будет пять-шесть записей, погоняй скрипт, при удачном решении применяй уже к живому. Кстати, MySQL у меня нет, только оракул, так что возможны нюансы.


Tue 31 Jul 2007 12:02 Mozilla/5.0 (OS/2; U; Warp 4.5; ru-RU; rv:1.8.1.2) Gecko/200




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.