Catatan Kecil Oracle “rownum” #2

Limit query dengan menggunakan rownum memang sukses untuk membatasi berapa banyak record yang ingin dikembalikan, tapi hari ini aku perlu limit untuk membatasi result setelah record XX dan sampai record XX.

Aku kira dengan menambahkan batasan bawah rownum yang ingin dikembalikan menjadi:

SELECT rownum row2, b.row1, b.k_agama, b.content
FROM
(
  SELECT rownum row1, a.k_agama, a.content FROM m_agama a ORDER BY a.content
) b
WHERE 5 <= rownum AND rownum <= 10;

bisa digunakan, akan tetapi hal itu tidak sesuai dengan yang aku inginkan. Query tersebut gagal. Tidak ada record yang dikembalikan.

Quick workaround adalah dengan mengubahnya menjadi seperti ini:

SELECT c.row2, c.row1, c.k_agama, c.content
FROM
(
  SELECT rownum row2, b.row1, b.k_agama, b.content
  FROM
  (
    SELECT rownum row1, a.k_agama, a.content FROM m_agama a ORDER BY a.content
  ) b
) c
WHERE 5 <= rownum AND rownum <= 10;

Aku tahu workaround ini payah, tapi aku butuh query ini berjalan secepatnya.

Catatan Kecil Oracle “rownum”

-- rownum menunjukkan urutan fisik dari record
-- dalam database
SELECT rownum row1, a.k_agama, a.content FROM m_agama a;

-- jika kita order hasil query maka rownum tidak lagi akan urut
-- karena rownum menunjukkan posisi asli dari record
SELECT rownum row1, a.k_agama, a.content FROM m_agama a ORDER BY a.content;

-- jika query model ini diterapkan limit hasil query (emulasi LIMIT)
-- maka akan dihasilkan hasil yang salah
SELECT rownum row1, a.k_agama, a.content FROM m_agama a WHERE rownum <= 5 ORDER BY a.content;

-- dengan multi select maka bisa didapatkan urutan dari query
-- yang menggunakan order
SELECT rownum row2, b.row1, b.k_agama, b.content
FROM
(
SELECT rownum row1, a.k_agama, a.content FROM m_agama a ORDER BY a.content
) b;

-- dengan menggunakan model query terakhir maka bisa diperoleh record yang
-- dibutuhkan (implementasi query LIMIT seperti di mysql)
SELECT rownum row2, b.row1, b.k_agama, b.content
FROM
(
SELECT rownum row1, a.k_agama, a.content FROM m_agama a ORDER BY a.content
) b
WHERE rownum <= 5;

Mengurutkan daftar account Thunderbird

Akhir-akhir ini aku terpaksa merubah dan menata ulang account-account email yang aku gunakan, serta menghapus account-account email yang tidak lagi dibutuhkan. Hal ini menyebabkan urutan account yang tampil menjadi acak, atau tidak enak dipandang mata tidak sesuai dengan yang inginkan.

Untuk mengurutkan account ini ada sebuah add-on yang bisa digunakan, aku lupa namanya, tapi googling akan mengembalikan hasil yang cepat. Add-on ini waktu aku coba dulu tidak berjalan sesuai dengan yang aku inginkan, sehingga memaksa aku untuk mencari jalan lain.

Setelah googling sana, googling sini. Seperti inilah kesimpulannya:

Pertama-tama buka file ~/.mozilla-thunderbird/<random-name>/prefs.js dengan editor kesukaan. <random name> bisa dicek di file ~/.mozilla-thunderbird/profiles.ini seksi [Profile#] bagian Path dengan # adalah index profile thunderbird yang digunakan.

Cek bagian "mail.accountmanager.accounts" didalamnya terdapat isian yang kira-kira seperti ini "account9,account2,account6,account8,account3,account7,account1". Nah urutan inilah yang digunakan sebagai patokan untuk menampilakan list di thunderbird.

Untuk melihat account# itu adalah account apa, bisa cari pada key mail.account.account#.server setelah itu lihat pada key mail.server.server#.name. Pada key ini terdapat nama yang ditampilkan sesuai pada tree di thunderbird.

Setelah diurutkan sesuai dengan keinginan, silahkan lihat hasilnya dengan menjalankan thunderbird.

*Happy sorting*