Sayısal Veri İçeren Karakter Alanlar

Oracle veri tabanında, sayısal veri içermesi beklenen karakter tipinde (CHAR,VARCHAR) alanlar sorun yaşamak için birebirdir. Örneğin müşteri numarası tutulan bir alana, servis ve grafik arayüz seviyesinde yeterli kontroller yapılmazsa müşteri adı, soyadı..vs gibi bilgiler yazılıyor olabilir 🙂 Bu alanda to_number() kullanarak bir sorgu yazdığınızda ve ya tabloyu bu alan üzerinden başka bir tablodaki nümerik bir alana bağlamak istediğinizde ORA-01722 hatası alırsınız.

Alanın yer aldığı tablodaki satırları düzeltmek için hangisinde hata olduğu bulmak da ayrı bir sorundur. Bunun için UPPER () ve LOWER () metotlarını kullanabilirsiniz. UPPER () ve LOWER () metotları numerik değerler için aynı, karakter değerleri için farklı sonucu vereceğinden, hatalı satırlara ulaşabilirsiniz. Diyelim ki tablomuzun adı MUSTERI, alanın adı MUSTERINO olsun:


CREATE TABLE MUSTERI
(
RECORDOID NUMBER(16) NOT NULL,
MUSTERINO VARCHAR(10) NOT NULL,
MUSTERIADI VARCHAR(10) NOT NULL
);

Tabloya bazı kayıtlar atalım:


Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(4, '!', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(3, '-', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(2, 'bogac', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(1, '100', 'bogac');
COMMIT;

Tabloyu yarattıktan sonra geçersiz değerler içeren satırları bulalım:


SELECT *
FROM MUSTERI M
WHERE UPPER(M.MUSTERINO) != LOWER(M.MUSTERINO)

Bu çözüm UPPER ve LOWER metotlarında aynı sonucu veren bazı diğer karakterler (“!”,”-” gibi) için yeterli olmayabilir, sadece bu karakterleri içeren satırlar olduğundan şüpheleniyorsanız ek sorgular yazmak gerekebilir. Sorunla Oracle veri tabanında karşılaşmış olsam da, diğer veri tabanı sistemleri için de çözüm olacağını düşünüyorum.

Kolay gelsin 🙂

SQLZOO sql öğrenmenin kolay yolu

Stumble upon sayesinde bir siteye denk geldim. Aslında daha önceden duyduğum ama incelemediğim bir siteydi.

Bu site sql server, mysql, oracle vb gibi veritabanları için tutorial ve hazır verilerle veritabanı query mantığını öğretmeye yardımcı oluyor. Küçük ve sonuçları sistem tarafından bilinen tutorial lar sayesinde kişi, basit sorgu yapabilir hale getirilip daha sonra da kendi imkanlarıyla kendini geliştirme fırsatı bulaibliyor.

Adresi : http://sqlzoo.net/

Yeni başlayacaklar için önerebilirim. Fonksiyonlari, nested query’ler e kadar bir anlatım söz konusu.

Tabi bu tarz şeyler sadece ehliyet vermeye benzer. Yine de arabayı iyi kullanmak için baya bir yol katetmek gerekir.