Firebird Store procedure le Bul ve Değiştir

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
AhmetNuri
Üye
Mesajlar: 260
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Firebird Store procedure le Bul ve Değiştir

Mesaj gönderen AhmetNuri »

Merhaba , Artık eskisi gibi programlamayla uğraşamıyorum. Arada sırada ufak tefek ihtiyaçları karşılamak için kod yazıyorum o kadar. Kod yazmak çok zevkli bir iş ama hagi işi yaparsanız yapın işinize ilerledikçe eninde sonunda işletmeci-idareci oluyorsunuz. her şeyi idare ediyoruz yani. Bende baya uzak kalmışım bu alemdenki iki satır kod için baya uğraştım. Yeni mezun yazılımcı arkadaşlara tavsiyem eğer işinizi severk yapıyorsanız kendinize iyi bir iş bulun kodlaınızı yazın kalanına karşmayın tabi günümüz şartlarında bu baya zor. İş akışı sizi yapmaktan hoşalandığınız kod yazma yerine okuldan mezun olduğunuzda angraya olarak gördüğünüz işlere sürüklüyor. Her halanda böyle mesela doktor olasınız eninde sonunda baş hekim yapıyorlar doktorluk yerine hastane müdürü oluveriyorsunuz Smile
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)
);

Ahmet DENİZ
Cevapla