Bir projede kullandığımız invisible kolonlar ile ilgili default olarak sort edilme mantığı bizi biraz uğraştırmıştı. Sonradan araştırdığım da eğer tablo içerisinde invisible kolonlarınız varsa oracle bunları default olarak sort edilme listesinde en sonuna atıyor, yani aslında o kolonu tablonun son kolonuymuş gibi değerlendiriyor.
Şöyle açıklamaya çalışayım. Örnek bir tablo create edelim ve üzerinde konuşalım ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
===> drop table kamil.order_test Table dropped. ===> CREATE TABLE kamil.order_test (a number, b number INVISIBLE, c number, d varchar2(1) ) Table created. ===> insert into kamil.order_test(a,b,c,d) values (1,2,3,'A') 1 row created. ===> insert into kamil.order_test(a,b,c,d) values (2,3,4,'B') 1 row created. ===> insert into kamil.order_test(a,b,c,d) values (5,6,7,'C') 1 row created. ===> insert into kamil.order_test(a,b,c,d) values (8,9,10,'D') 1 row created. ===> commit Commit complete. |
B kolonumuz invisible olarak create ettik. Bu haliyle select ettiğimizde ;
1 2 3 4 5 6 7 8 9 10 |
===> select * from kamil.order_test A C D ---------- ---------- - 1 3 A 2 4 B 5 7 C 8 10 D 4 rows selected. |
Doğal olarak B kolonu invisible olduğu için gelmedi ve tablodaki değerler de A kolonundan başlayarak sort edilmiş oldu.
Şimdi B kolonunu visible(görünür) yapalım ;
===> alter table kamil.order_test modify b visible
Table altered.
Tekrar select edelim ;
1 2 3 4 5 6 7 8 9 10 |
===> select * from kamil.order_test A C D B ---------- ---------- - ---------- 1 3 A 2 2 4 B 3 5 7 C 6 8 10 D 9 4 rows selected. |
B kolonunu sanki son kolonmuş gibi düşünüp sort etmek isterken de son sıraya koydu.
Burada kolonun en baştan invisible olarak create edilmesi ile tablo create edildikden sonra invisible hale getirilmesi arasında da hiç fark yok.
Umarım bir yerlerde işinize yarar.