Oracle 12c : Invisible Sütunlar

2015-12-24 21:14:59


Oracle veritabanı kullanan bir uygulamamız olduğunu düşünelim ve uygulamanın yeni bir versiyonunun kurulumunun yapılacağını ve bu kurulum öncesi tablolara yeni alanlar ekleneceğini ve bir veri taşıma işlemi yapılması gerektiğini varsayalım. Bir tabloya yeni alan eklediğimizde uygulama kodları içerisindeki INSERT cümleciklerinde sütunlar belirtilmemişse, bu INSERT cümlecikleri hatalı duruma gelecektir. Bu yüzden bir tabloya yeni alan eklediğimizde uygulamanın eski versiyonu çalışmayacaktır ve veri taşıma ( migration ) işlemi sırasında sistem kesintiye uğrayacaktır. Oracle 12c'de bu duruma çözüm olarak INVISIBLE sütunlar eklendi. Tablodaki bir sütun invisible olduğu zaman, açıkça belirtilmediği sürece o sütunu göremeyiz. Yani select * from tablo_adi kodunu çalıştırdığımızda o sütunu göremeyiz veya insert into ile açıkça belirtmediğimiz sürece o sütuna değer girmemiz gerekmez.

INVISIVLE sütunların mantığını daha iyi anlamak için invisible sütuna sahip olan bir tablo yaratıp üzerinde çalışalım.


CREATE TABLE EMPLOYEE (
  ID NUMBER(10) GENERATED ALWAYS AS IDENTITY  PRIMARY KEY,
  FIRST_NAME VARCHAR2(20) NOT NULL,
  LAST_NAME VARCHAR2(20) NOT NULL,
  SALARY NUMBER INVISIBLE
);
insert into employee(first_name,last_name) values('Kazım','Soylu');
insert into employee(first_name,last_name,salary) values('Smith','Brown',10000);


İlk insert cümleciğinde invisible olan SALARY sütununu belirtmedik ve başarılı olarak kayıt girebildik. İkinci cümlecikte ise SALARY sütununu belirterek değer girdik.


SELECT * FROM EMPLOYEE;
ID      First_Name    Last_Name
1       Kazım         Soylu
4       Smith         Brown

SELECT * FROM EMPLOYEE ile sorguladığımızda invisible sütunun gelmediğini görüyoruz.

SELECT ID, FIRST_NAME, LAST_NAME, SALARY FROM EMPLOYEE;
ID      First_Name   Last_Name   Salary
1       Kazım        Soylu    
4       Smith        Brown       10000

Select ifadesinde Salary sütununu yazdığımız zaman sorgu sonucunda gelmektedir. 

ALTER TABLE komutu ile INVISIBLE sütunu VISIBLE yapabiliyoruz. Visible yaptığımızda artık normal bir sütun olacak ve select * from sorgusu sonucunda gelecektir.

ALTER TABLE EMPLOYEE MODIFY SALARY VISIBLE;
SELECT * FROM EMPLOYEE;
ID      First_Name   Last_Name   Salary
1       Kazım        Soylu    
4       Smith        Brown       10000

Visible bir sütunu ALTER TABLE komutu ile INVISIBLE durumuna dönüştürebiliriz.

ALTER TABLE EMPLOYEE MODIFY SALARY INVISIBLE;

Bu konu ile ilgili bahsedeceklerim şimdilik bu kadar :) İyi çalışmalar  :)