Elime 3 milon dan fazla bir mail bankası geçti, dedim şunu bi temizliyim. Db ye aldım. Unic indexle bir sürü chek kontrolü ile filan geçersiz mailleri baya ayıkladım ama yetmedi. çünkü kayıtlarda ç,ş,ü, gibi kareketerler kullanılmış olacak şey değil ama oluyor. Bunları temizlemenin iki yöntemi var biri dbyi txt olarak export edip bi stajer bulup bu angraya işi notepat++ la bul değiştir yaptırmak. diğer veri tabanının bul değiştir fonksiyonunu kullanarak bu işlemi firebirde yaptırmak. Her halukarda işlem uzun sürüyor, çünkü veri çok. Neyse ben sql i seçtim ama işin başında deyim notepat++ kesin daha hızlı bitirirdi bu işi. Çünkü kod yazmasıydı filandı feşamdı derken 30 dk geçiveriyor. birde unic index e takıldı hata verdi. Ama ben noSql e yes diyemeyen antika programcı familyasıdayım.
Sadede gelmek gerekirse
Emails tablsunda Emails_email alanındaki verilerde bul ve değitir işlemi yapan store procedure yi kod olarak ekliyorum.
mesela veri tabanında İ kullanıldıyasa onu i olarak değiştiriyorum.
bunun için cursor kullanıyorum
bu fonksiyon için firebird 2.1üstü kullanmanız gerekmekte.
Kod: Tümünü seç
SET TERM ^ ;
create PROCEDURE DEGISTIR2
AS
DECLARE VARIABLE sayac INTEGER ;
DECLARE VARIABLE EMAILS varchar(60);
DECLARE VARIABLE KAYIT_SAYISI integer ;
declare cur cursor for
(select EMAILS_EMAIL from EMAILS);
begin
sayac = 0;
select count(*) from EMAILS into :kayit_sayisi ;
open cur;
while (:kayit_sayisi>sayac) do
begin
sayac = sayac +1 ;
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'Ü', 'u');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'ü', 'u');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'Ğ', 'g');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'ğ', 'g');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'İ', 'i');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'I', 'i');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'Ş', 's');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'ş', 's');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'Ç', 'c');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'ç', 'c');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'Ö', 'o');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'ö', 'o');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, ' ', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'www', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'WWW', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, '!', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, '#', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, '~', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, ':', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, '?', '');
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, '$', '');
if (row_count = 0) then leave;
suspend;
end
close cur;
end^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE DEGISTIR2 TO SYSDBA;
Kod: Tümünü seç
CREATE TABLE EMAILS
(
EMAILS_OTO integer NOT NULL,
EMAILS_EMAIL varchar(50) COLLATE PXW_TURK,
EMAILS_NOT varchar(10) COLLATE PXW_TURK,
CONSTRAINT PK_EMAILS_0 PRIMARY KEY (EMAILS_OTO)
);