Friday, June 13, 2008

Oracle SQL: GRANT function




Hehehe post baru untuk harini. Penat gak keje siang malam ni. Satgi nak balik kampung pulak. Okay ni aku jumpa satu benda baru (bagi diri aku la). Secara tak sengaja aku nyer senior DBA bagi kat aku benda GRANT ni. Okay sebenarnya GRANT ni untuk bagi permission system privileges dan object privileges kepada users ataupun roles. Ahaha kalau tak paham, abaikan, sebab aku pun cilok dari website lain.

Nak bagi senang/pendek cerita, GRANT ni akan membolehkan hampa(korang) buat sql query atas sesuatu table walaupun dekat object/schema lain. Ok kat bawah ni contoh bila kita nak select records dalam table user_table dalam object/schema user/user@userdatabase kat object/schema lain iaitu admin/admin@userdatabase.
GRANT SELECT ON user_table TO admin;

Sebenaqnya selain daripada select pun boleh contohnya insert, update, delete, trigger dan etc. Ok berbalik pada perbincangan, atas tadi cuma nak bagi permission ja, kat bawah ni pulak cara nak guna.

ni hampa kena masuk admin/admin@userdatabase dulu:
SELECT *
FROM USER.user_table USE, admin_table adm
WHERE USE.ID = adm.ID;

Senang kan? Terus ja boleh connect antara dua schema. Eheheh tu ja kot. Kalau hampa rasa salah takyah la ikut. ehehe.

Wednesday, June 11, 2008

Oracle SQL: select N records




Macam programmer yang lain, aku selalu ada masalah bila nak handle data yang banyak dalam database. Tambah pulak bila nak buat select statement pastu dapat beratus - ratus ribu data. So bila masa nak copy masuk dalam texteditor dah macam - macam masalah pulak yang keluaq. Memory tak cukup la, editor hang la and macam macam lagi. So kan baguih kalau dapat select data - data sikit sikit. Contoh kalau ada 200 ribu data, kita boleh select 100 ribu dulu, pastu save dalam texteditor, pastu buat benda yang sama untuk 100 ribu data yang seterusnya.

Nasib baik semua ni takda masalah dalam SQL. Untuk aku yang more kepada Oracle, ada satu function dalam Oracle SQL yang boleh buat benda ni iaitu 'ROWNUM'. Okay script yang first ni adalah untuk select first 1000 records.
SELECT column_name
FROM table_name
WHERE ROWNUM <= 1000;

Tapi masalah jugak kan? Bila nak dapatkan data yang 1000 seterusnya takkan kita nak buat <= 2000, so data 1000 yang awal pun ada jugak. Oleh tu kita kena pulak guna script yang bawah ni. Script kat bawah ni akan select data yang ke 1000 sampai 2000.
SELECT *
FROM (SELECT ROWNUM rnum, a.*
FROM (SELECT *
FROM table_name) a
WHERE ROWNUM <= 2000) WHERE rnum >= 1000;

Tu saja kot untuk post ni, aku saja je tulis supaya aku pun tak lupa bila sampai time nak guna nanti.