Oracle Invisible Columns (12c New Features)

Herkese Selam,

Bu yazıda sizlere Oracle 12c ile gelen yeni bir özellikten bahsedicem umarım farkındalık anlamında faydalı bir yazı olur.

Oracle 12c ile beraber tablolarda, kolonların görünürlülüğü ile ilgili yeni bir özellik eklendi. Artık tablolarda istediğimiz kolonların görünür olmasını yada görünmemesini çok basit bir şekilde sağlayabileceğiz. Bu özellik bence gerekli bir özellikti çünkü generic olarak erişim sağlanan tablolarda herkesin her kolonu görmemesini view yaratmadan sağlayabilmek oldukça pratik gözüküyor.

Şimdi invisible bir kolon nasıl yaratılıyor ona bakalım.

CREATE TABLE invColExm
(
colA NUMBER,
colB NUMBER INVISIBLE,
colC VARCHAR2 (100)
);

Evet yukarıdaki örnekten de anlaşılabileceği gibi data tipini belirledikten sonra ilgili kolona invisible söz deyimi eklenerek kolonun görünmez olması sağlanabiliyor. Peki bu kolon hangi aksiyonlarda invisible ona bakalım.

1 – SELECT * FROM invColExm; — colB gözükmez.

2 -DESC invColExm; — colB kolonu listede gozukmez

3– /* ROWTYPE ile referans gösterilen tabloda
invisible kolona erişilemez buradada
görünmezdir*/

— Bu blok hata almaz
DECLARE
v_tb invColExm%ROWTYPE;
BEGIN
v_tb.colA := 1;
v_tb.colC := ‘Deneme’;
END;

— Bu blok Hata Alır
DECLARE
v_tb invColExm%ROWTYPE;
BEGIN
v_tb.colA := 1;
v_tb.colC := ‘Deneme’;
v_tb.colB := 12;
END;

Ancak insert, delete ve update cümlelerinde istisnai durumlar mevcut. Eğer ben invisible kolonun varlığından haberdarsam bu kolon üzerinden DML çalıştırabiliyorum. Örnekleyecek olursak.

— Bu cumle colB kolonunu
–invisible olarak algilar
–ve gelen değerleri
–sirayla colA ve colC ye
–yazar.
INSERT INTO invColExm VALUE
(1,’Deneme’);

–Eger user invisible kolondan
–haberdarsa kolonun adini vererek
–bu kolonada deger yazilmasini saglayabilir.
INSERT INTO invColExm (colA, colB, colC)
VALUES (12, 10, ‘Deneme’);

–invisible kolonun varligindan
–haberdarsam update cümlesinde de
–kullanabiliyorum
UPDATE invColExm
SET colB = 20;

–invisible kolonun varligindan
–haberdarsam delete cümlesinde de
–kullanabiliyorum
DELETE invColExm
WHERE colB = 20;

inivisble olarak setlenmis kolonu asagidaki cümle ile görünür hale getirebiliyoruz.  Ancak görünür hale gelen kolon yaratıldığı sırada değil bundan sonra en son kolon olarak gözükmeye başlıyor.

ALTER TABLE invColExm
MODIFY colB VISIBLE;

Yukarıdaki cümle ile invisible olan kolon visible hale gelebilmektedir. Bu işin tam terside olabilir yani visible olan bir kolon invisible halede getirilebilir. Bu noktada daha önceden bu kolon yazılarak (ör: select colA,ColB from invColExm ) çalışan sorgular çalışmaya devam edecektir. Ancak * karakteri ile bu kolon artık çekilmeyecektir. Bu yüzden bir kolonu invisible yapılırken mevcutta bu kolonu sorgulayan kodlar göz ardı edilmemelidir.

Ayrıca aşağıdaki tablo tiplerinde invisible kolon desteğinin olmaması da unutulmamalıdır.

External tables – Cluster tables -Temporary tables

Umarım farkındalık anlamında faydalı bir yazı olmuştur.

Kaynaklar;

http://docs.oracle.com/

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Uncategorized and tagged , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s