Oracle SQL Basic: ROWNUM


ROWNUM adalah salah satu pseudocolumn di Oracle yang mengembalikan sebuah angka yang menunjukkan posisi baris di tabel. Nilai ROWNUM pada baris pertama akan berupa 1, pada baris kedua berupa 2, dan seterusnya.

Salah satu hal yang bisa menjebak dalam penggunaan ROWNUM, misalnya dalam top-N reporting. Saat kita diminta untuk menampilkan 10 employee pertama setelah di-urut-kan berdasarkan nama, mungkin sekali yang terbayang dalam benak kita adalah berikut:


SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name;

Sayangnya, query di atas dapat saja menghasilkan nilai yang berbeda, karena setiap baris akan diurutkan ulang berdasarkan ORDER BY. Cara yang lebih aman adalah dengan dengan query berikut:


SELECT * FROM (SELECT * FROM employees ORDER BY last_name)

WHERE ROWNUM < 11;

Salah satu misteri yang berhubungan dengan ROWNUM adalah mengapa query berikut selalu tidak menghasilkan apa-apa?


SELECT * FROM employees WHERE ROWNUM > 1;

Pada awalnya aku berpikir query ini seharusnya menghasilkan baris ke-dua sampai baris terakhir. Tapi ternyata tidak demikian. Hal ini karena, pada saat baris pertama di-fetch, ia akan memiliki ROWNUM = 1, dan ini membuat kondisi (ROWNUM > 1) bernilai false. Lalu saat baris kedua di-fetch, ia juga memiliki ROWNUM = 1 mengingat baris pertama tidak memenuhi kondisi. Akibatnya kondisi (ROWNUM > 1) juga bernilai false. Dan begitu selanjutnya, sehingga tidak ada baris yang dikembalikan.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: