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.




