Başlangıç > Database, Forms, Oracle, PL/SQL, Reports > pl/sql de metin içindeki karakter ya da sayısal değerleri bulma

pl/sql de metin içindeki karakter ya da sayısal değerleri bulma


Merhaba,
Database deki tablolarımız içerisinde kayıtlı olan karmaşık (karakter + sayısal değerler )verilerden sadece karakter içeriği ya da sayısal içeriği almak istediğimiz durumlar olabilir. Bu durumlarda küçük kod parçaları ile kontrol işlemleri yapmak yerine bu işlemi genelleştirip bir fonksiyon yardımı ile bu işlemi çözebiliriz. Bu durum için bir fonksiyon hazırlayalım.

CREATE OR REPLACE FUNCTION deger_bul(gelen_metin VARCHAR2, tip NUMBER) RETURN VARCHAR2 IS
  sonuc      VARCHAR2(4000);
  tmp_deger  VARCHAR2(10);
  tmp_number NUMBER;
  i          NUMBER;
BEGIN
  
  --tip=0 >> Karakter değerler
  --tip=1 >> Sayısal değerler
  
  sonuc     := NULL;
  tmp_deger := NULL;
  IF gelen_metin IS NULL THEN
    RETURN NULL;
  END IF;
  FOR i IN 1 .. length(gelen_metin) LOOP
    IF tip = 0 THEN
      tmp_deger := substr(gelen_metin, i, 1);
      IF tmp_deger NOT IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') THEN
        sonuc := sonuc || tmp_deger;
      END IF;
    ELSIF tip = 1 THEN
      BEGIN
        tmp_deger  := substr(gelen_metin, i, 1);
        tmp_number := to_number(tmp_deger);
        sonuc      := sonuc || tmp_deger;
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END;
    ELSE
      RETURN('Girien Tip İçin Bir Çalışma Yapılamaz.!');
    END IF;
  END LOOP;
  RETURN sonuc;
END deger_bul;

Hazırladığımız bu fonksiyon ile artık istediğimiz metin içinden istediğimiz veri setini alabiliriz. İster karakter içeriği , ister sayısal içeriği. Hemen bir örnek ile daha iyi bu durumu kavrayalım. Aşağıdaki script ile fonksiyonumuzun üç farklı duruma göre aynı anda çalıştırarak sonuçlarını görelim.

SELECT deger_bul('Bu Metin İçinden Sadece Karakter Değerleri Bulacak.1234567890', 0) karakter,
       deger_bul('Bu Metin İçinden Sadece Sayısal Değerleri Bulacak.1234567890', 1) sayisal,
       deger_bul('Bu İşlem İçin Doğru Tip Değeri Olmadığından Fonksiyon Hata Dönecek', 2) sonuc_yok
  FROM dual;
 

Fonksiyonu çalıştırdıktan sonra verdiğimiz tip değerlerine göre aldığımız sonuç aşağıdaki gibi olacaktır. Alınan sonuçtan da anlaşılacağı gibi sadece belirttiğimiz tip değerine göre sonuçlarımızı alabiliyoruz. Tanımlanan tip değeri dışında bir değer ile fonksiyon çalıştırıldığında açıklamalı olarak girilen tip için çalışma yapılmayacağı bilgisini vermiş oluyoruz.

KARAKTER SAYISAL SONUC_YOK
Bu Metin İçinden Sadece Karakter Değerleri Bulacak. 1234567890 Girien Tip İçin Bir Çalışma Yapılamaz.!

Bu basit ve işlevsel fonksiyon daha ileri amaçlar için çeşitli değişiklikler ile daha da verimli hale getirilebilinir.
Kolay gelsin.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: