12-10-2012, 20:52
Merhaba bir önceki göndermimde olan firebird bul değiştir ve aynı kayıtları bul örnek dosyasını ekliyorum. Bu dosyayı mail adreslerini ayıklamak için hazırlamıştım. Onun için chek şartları filan var.
Yer alan örnekler
Aynı alanda yer alan aynı kayıtların bulunması
Aynı alanda yer alan aynı kayıtların silinmesi
Bul ve değiştir.
Chek örnekleri
Yer alan örnekler
Aynı alanda yer alan aynı kayıtların bulunması
Aynı alanda yer alan aynı kayıtların silinmesi
Bul ve değiştir.
Chek örnekleri
Kod:
SET TERM ^ ;
create PROCEDURE AYNIOLANLARISIL
RETURNS (
EMAILS varchar(60) )
AS
DECLARE VARIABLE sayac INTEGER ;
DECLARE VARIABLE KAYIT_SAYISI integer ;
declare cur cursor for
(select VWAYNI.EMAILSS from VWAYNI);
begin
/*
BİR TABLODA AYNI ALANDA AYNI KAYIT VARSA BULUP KAYITLARI SİLER
UNİC İNDEX KULLANILMAMA SEBEBİ
BUL DEĞİŞTİR FONKSİYONU ÇALIŞTIKTAN SONRA BAZI KAYITLAR AYNI HALE DÜŞEBİLİYOR
MESELA İKİ EMAİL ADERSİ
İNFO@İNFO.COM
info@info.com
İ harflarini i harfine dönüştürünce ikitane aynı kayıt oluyor ve bul değiştir hata verip deva edemiyor
*/
sayac = 0;
select count(*) from VWAYNI into :kayit_sayisi ;
open cur;
while (:kayit_sayisi>sayac) do
begin
select VWAYNI.EMAILSS from VWAYNI into :EMAILS ;
sayac = sayac +1 ;
delete from EMAILS where EMAILS.EMAILS_EMAIL = :EMAILS ;
suspend;
end
close cur;
end^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE AYNIOLANLARISIL TO SYSDBA;Kod:
SET TERM ^ ;
create PROCEDURE DEGISTIR
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 ;
/*
BUL DEĞİŞTİR.
SEÇİLEN ALANDA NOTPAT DAKİ BUL DEĞİŞTİR FONKSİYONU GİBİ ÇALIŞIR
ÖRNEĞİN
update EMAILS r set r.EMAILS_EMAIL = replace(r.EMAILS_EMAIL, 'ü', 'u');
Ü HARLERİNİ u harfine çevirir
AHMET NURİ DENİZ
10.2012
*/
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', '');
if (row_count = 0) then leave;
suspend;
end
close cur;
end^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE DEGISTIR TO SYSDBA;Kod:
CREATE VIEW VWAYNI (EMAILSS)
AS
/* TABLODAKİ ALANDA BİRDEN FAZLA AYNI KAYITTAN OLANLARI LİSTELER*/
/* AHMET NURİ DENİZ 11.10.2012 */
SELECT EMAILS.EMAILS_EMAIL
FROM EMAILS
GROUP BY EMAILS.EMAILS_EMAIL
HAVING ( COUNT(EMAILS.EMAILS_EMAIL) > 1 )
;
