Ada saatnya kita diharuskan untuk memilih satu baris dari sekian banyak baris yang ada di tabel. Untuk itu, kita dapat menggunakan SQL seperti berikut di database Oracle:
SELECT nama_kolom FROM
( SELECT nama_kolom FROM nama_tabel
ORDER BY DBMS_RANDOM.VALUE()) WHERE ROWNUM = 1;
Script 1
Jika menginginkan lebih dari 1 baris yang acak, kita dapat mengganti ROWNUM = 1, menjadi ROWNUM <= n, dimana n adalah jumlah baris record yang kita inginkan.
Bagaimana Cara Kerja Query Di Atas?
Pada umumnya kita menggunakan nama field pada bagian ORDER BY untuk menentukan pengurutan berdasarkan field apa. Selain itu, kita juga bisa menggunakan angka (bilangan bulat) untuk menunjukkan posisi kolom yang akan dijadikan basis pengurutan.
Sebagai contoh, SQL ini akan mengurutkan berdasarkan kolom kedua:
SELECT kolom1, kolom2 FROM nama_tabel ORDER BY 2;
Script 2
Lalu, bagaimana dengan ORDER BY DBMS_RANDOM.VALUE()? Fungsi tersebut akan mengembalikan angka pecahan di antara angka 0 dan 1. Tentu saja ini tidak berarti akan mengurutkan di-"antara" kolom pertama?
Selain mengharapkan nama kolom dan angka bilangan bulat, klausa ORDER BY juga menerima ekspresi, seperti hasil kembalian sebuah function. Pengurutan akan dilakukan berdasarkan nilai ekspresi ini untuk setiap baris yang ada. Oleh sebab itu, query pengurutan yang kita berikan pada dasarnya adalah penyederhanaan dari query berikut ini:
SELECT nama_kolom FROM
( SELECT DBMS_RANDOM.VALUE() AS RANDOM, nama_kolom FROM nama_tabel
ORDER BY RANDOM) WHERE ROWNUM = 1;
Script 3
Cara ini bisa kita gunakan untuk mengambil data acak/random yang akan kita gunakan dengan alas an tertentu. Misal, akan kita gunakan untuk menetukan pemenang undian. Saya telah mencoba aplikasi contoh simple menggunakan form di Oracle Dev 10G.
Semoga bermanfaat
0 comments:
Post a Comment