Regex ile Substring

201307020001282007201506112.2.1.9QkZFQkZCR

Yukarıdaki metinde koyu olan sürüm bilgisini PL/SQL’de almak istiyoruz. Kurallar şu şekilde;

  • İlk noktadan önce 1 rakam olur.
  • Diğer noktalardan önce en az 1 rakam olabilir.
  • Son noktadan sonra en az 1 rakam olabilir.
  • Toplamda 3 nokta olabilir.

Sürüm bilgisinin yeri değişken olacağı için işlemi regex ile yapmak istiyoruz. Bunun için aşağıdaki fonksiyonu kullanabiliriz.

REGEXP_SUBSTR('201307020001282007201506112.2.1.9QkZFQkZCR', '\d\.\d+\.\d+\.\d+')

Aynı zamanda istediğimizi metini almak ve istediğimiz formatta göstermek istiyorsak REGEXP_REPLACE kullanabiliriz.

Phone=”1234567890

Yukarıdaki metinden telefon numarasını alıp +90 xxx xxx xx xx formatında göstermek istiyoruz. Bunun için aşağıdaki fonksiyonu kullanabiliriz.

REGEXP_REPLACE('Phone="1234567890"', '^Phone="(.{3})(.{3})(.{2})(.{2})"$', '+90 \1 \2 \3 \4')

Cursor Kullanımı

Bir sonuç kümesinden, satırları almak için kullandığımız işaretçiye CURSOR denir. SELECT komutundan dönen sonuçları ifade eden veri yapısı olarakta düşünebiliriz. Cursor kullanırken dikkatli olmak gerekir. Eğer çok fazla cursor açılır ve kapatılmazsa “ORA-0100: Maximum open cursors exceeded” hatası verebilir.

DECLARE
  CURSOR cur_1 IS
         SELECT tablo_adi FROM tablolar;
  v_tablo_adi tablolar.tablo_adi%TYPE;
  v_sayi INTEGER := 1;
BEGIN
  OPEN cur_1;
  LOOP
     FETCH cur_1 INTO v_tablo_adi;
     IF cur_1%notfound OR v_sayi > 2000 THEN
       EXIT;
     END IF;
     v_sayi := v_sayi + 1;
  END LOOP;
  IF cur_1%ISOPEN THEN
     CLOSE cur_1;
  END IF;
  DBMS_OUTPUT.put_line('Islenen satir sayisi: '||v_sayi);
END;