4 Şubat 2017

Oracle SQL Veri Tipleri (Oracle / PLSQL Data Types)

Oracle SQL Veri Tipleri (Oracle / PLSQL Data Types)

Oracle / PLSQL'de kolonlar (Columns) için kullandığımız veri tiplerinden bahsedeceğim. Database'de bilgiler tablolar içerisinde tutulmaktadır. Tablomuzu tasarlarken; hangi kolonda hangi veriyi tutacağımızı tasarlayıp ona uygun veri tipini seçmeliyiz. Bu veri tipi karakter olabilir, sayısal bir değer olabilir veya tarih değeri olabilir.

VARCHAR2: Karakter formatı için kullanılır. Null(Boş) değerlerleri "Space" (Boşluk) olarak kaydeder. Maksimum karakter sayısı 4000 Bytes'dır. Büyüklük karakteri belirtilmelidir ve yazı karakteri kadar kolonda yer kaplar. VARCHAR2 ve CHAR arasındaki fark verinin sonuna eklenen boşluk karakteri ihmal ederken, VARCHAR2 bunu dikkate alır ve kaydeder.

CHAR: Sabit uzunluğu belli olan karakter seti için kullanılan veri tipidir. Maksimum karakter sayısı 2000 Bytes'dır. Belirlenen uzunluktan daha kısa bir dizi kaydetmek istediğinizde kalan satır sonuna otomatik boşluk karakteri eklenmektedir. Örneğin 8 karakter uzunluğuna sahip bir kolona siz "Burak" dizisini eklediniz, kolona "Burak   " olarak kaydetmektedir. Genelde TCKN gibi veri seti belli olan diziler için kullanılabilir.

NUMBER: Digit, sayı karakteri için kullanılır. Tam ve ondalıklı kısım olarak sayıları saklar.
NUMBER (P,S)
NUMBER (4,2) 4 basamak sayısını, 2 ise ondalık kısmı söyler: 77,77

Oracle SQL Veri Tipleri (Oracle / PLSQL Data Types)

INTEGER: Tam sayılı değerler için kullanılan veri tipidir. Negatif ve Pozitif sayı değerleri için kullanılır ve Byte cinsinden kolona kaydedilir. NUMBER(38) veri tipine karşılık gelir.

NUMBER ve INTEGER veri tipleri arasındaki fark; Oracle'da Numeric değerler genelde NUMBER Data tipinde tutulur, INTEGER(INT) daha küçük size da Data tutar. Yani INTEGER pek kullanılan bir Data tipi değildir. Numeric alan tutacaksanız NUMBER işinizi görecektir. Hem küçük sayı hemde çok büyük sayılar için kullanışlıdır. Tabi küçük sayıları da INT alanda da tutabilirsin ama ilerde yetersiz kalırsa Data tipini NUMBER'a dönüştürmeniz gerekir. NUMBER'da size küçük bile gelse basit bir Alter komutu ile size büyütebilirsiniz.

NUMBER(P,S) P karakter sayısı kadar toplam basamak tutar, S kadar ondalık kısım tutar.
NUMBER(9,2) 7456123.89 (Toplam 9 karakter, 2 ondalık)
NUMBER(9,1) 7456123.9  (Toplam 9 karakter, 1 ondalık)
NUMBER(6) 123456 (6 karakter tut, ondalık kısmı tutma)
NUMBER (Bu şekilde kullanılamaz, en azından karakter uzunluğu verilmelidir)

DATE: Tarih formatı için kullanılan veri tipidir. Sadece tarih girişi için kullanılır. 'YYYY-AA-GG' şeklinde depolama yapar. '1000-01-01'  ile  '9999-12-31' arasındaki tarihleri destekler.

DATETIME: Tarih ve Saat kombinasyonu için kullanılır. 'YYYY-AA-GG SS:DD:SS' şeklinde depolama yapar. '1000-01-01 00:00:00' ile  '9999-12-31 23:59:59' arasındaki tarihleri destekler.

TIME: Sadece Saat verisi saklamak için kullanılır. 'SS:DD:SS' (Saat-dakika-saniye) şeklinde saklar.

LONG: Oracle'ın eski versiyonlarda vardır pek kullanılmaz. Maksimum karakter seti 2 GB'dır.

LONG RAW/RAW: Bu veri tipleri günümüzde pek kullanılmaz. Asıl amacı eskiye yönelik desteği sağlamak. Bu tiplerin yerine BLOP, LOB, BFILE gibi veri tipleri kullanılır.

RAW: Long veri tipine benzer. Maksimum karakter seti 2000 Bytes'dır.

NVARCHAR2: VARCHAR2 veri tipine çok benzer. Aralarında ki tek fark girilen karakterler Unicode olarak saklanır. Maksimum karakter seti 4000 Bytes'dır.

UROWID: ROWID ile yapısı aynıdır. Fakat ROWID geçmişe yönelik destek amacıyla kullanılmaktadır. Oracle yeni versiyon olarak UROWID kullanır.

ROWID: Satırın(Row) Fiziksel adresini gösteren Pointer, Pseudo bir kolondur. ROWID 10 Byte boyutunda String tutar. Oracle'da en hızlı arama biçimdiri çünkü fiziksel veri setini tutar. Güncelleme, Silme işlemini hızlıca ROWID üzerinden yapabilirsiniz. Select çektiğimizde gözükmez ama görmek istersek;

SELECT ROWID,* FROM HR.TABLE;

ROWID değeri tablo ve blok yapısına göre değişebilir. ROWID tekrar eden kayıtları silerken de işimize yarar, çünkü silerken baz alacağımız değerler aynıysa farklı Unique bir değere ihtiyacımız vardır, bu durumda da ROWID’yi kullanabiliriz;

DELETE FROM TABLE_NAME V WHERE V.ROWID>(SELECT MIN (P.ROWID)
FROM TABLE_NAME P WHERE P.COLUMN_NAME = V.COLUMN_NAME);

NCHAR: Her bir karakteri 2 Byte olan ve en fazla 10 karakter içerebilen metinsel bir ifadeyi tutabilir. Tuttuğu Data kaç karakter olursa olsun 20 Byte’lık yer kaplar. Buradaki "N", National'dan gelmektedir. Bu değişken içerisinde uluslar arası kodlar (UNICODE) içeren metinsel ifadeler tutulabilir. ‘N’in tek farkı budur. Eğer tuttuğumuz Data UNICODE içermiyorsa, bu Data tipini kullanmamız gereksizdir. Maksimum karakter seti 2000 Bytes'dır.

CLOB(Character Large Object): Verileri karakter olarak saklar. Büyük veri setleri için kullanılır. Maksimum 4 GB veri saklasa da bu aralık (8 TB-128 TB) kadar çıkabilmektedir. Dosya uzantısı ".TXT" olan içerisindeki verileri CLOB içerisinde saklayabiliriz.

NCLOB: CLOB veri tipi ile aynı mantıkta olup Multi Byte veri tipini saklar.

BLOB: Verileri Binary olarak saklar.  Maksimum 128 TB kadar veri saklar. Resim, video gibi dosyalar bu veri tipinde saklanabilir.

BFILE: İşletim sistemindeki fiziksel dosyaların referansını saklamak için kullanılır.

FLOAT (P,S): Küçük rakamlı virgüllü ifadeler için kullanılır. Boyut ile sayının virgüllü kısmı dahil alabileceği en fazla miktar belirtilirken "S" ile virgülden sonra kaç basamak olacağı belirtilir.
Boyut değeri en fazla 38 olabilir.

BINARY_DOUBLE: Ondalıklı sayı değeri Binary(1-0) olarak tutulur . Bu sayede ondalıklı sayılar üzerindeki işlemlerde yuvarlama veya kırpma gibi durumlar oluşmaz.

BINARY_FLOAT: Ondalıklı sayı değeri Binary(1-0) olarak tutulur . Bu sayede ondalıklı sayılar üzerindeki işlemlerde yuvarlama veya kırpma gibi durumlar oluşmaz.

REAL: FLOAT veri tipine karşılık gelmektedir.

Oracle SQL Veri Tipleri (Oracle / PLSQL Data Types)

TOAD(Toad for Oracle) üzerinden Tablo oluşturma ve Kolon ekleme, Data Type seçimini yapacak olursak;

İlk olarak Schema Browser kısmından Tables yapısını açarız. Resimdeki ikondan Create Table kısmından yeni tablo oluşturabilirsiniz.

Oracle SQL Veri Tipleri (Oracle / PLSQL Data Types)

Tablo şemasından tablomuzu seçtikten sonra Columns sekmesinden kolonları görebilirsiniz.
Add Column: Yeni kolon eklemek için kullanılır.
Drop Column From This Table: Kolonu tablodan silmek için kullanılır.
Rename Column: Kolon adını değiştirmek için kullanılır.

Yeni bir kolon için Add Column dedikten sonra Column Name kısmına kolon adı, Type kısmından ise veri tipi seçebilirsiniz. Nullable seçerseniz kolon boş kalabilir, Not Nullable ise kolona veri girmenizi isteyecektir. Kolon özelliklerini belirledikten sonra Show SQL diyerek SQL kodunu da alabilirsiniz.

Kaynaklar
SQL General Data Types
en.wikipedia.org/wiki/Integer (Integer)
Datatypes in Oracle Database
OLAP DML Numeric Data Types