• Tidak ada hasil yang ditemukan

Think Different Pemrograman Basis Data: Cursor

N/A
N/A
Protected

Academic year: 2017

Membagikan "Think Different Pemrograman Basis Data: Cursor"

Copied!
8
0
0

Teks penuh

(1)

BAB V

CURSOR AND RESULT SETS

TUJUAN BELAJAR:

- Menjelaskan tentang proses cursor

- Menggunakan cursor dalam SP

- Melakukan position delete dan position update

- Mendeskripsikan jalannya cursor pada commit dan rollback

- Menggunakan proses cursor untuk mengembalikan result sets pada sebuah

aplkasi

- Menjelaskan bagaimana cursor mempengaruhi locking

Cursor memungkinkan sebuah aplikasi me-retrive beberapa baris dan kemudian

memprosesnya menjadi beberapa baris dalam 1 waktu.Ketika menggunakan sebuah cursor,

program dapat mengambil setiap baris secara sequential dari result table sampai data

terakhir.Statement SELECT digunakan harus dalam statement DECLARE CURSOR. Statement

DECLARE CURSOR menentukan dan menamai cursor, mengidentifikasi sekumpulan baris

yang diambil(retrieved) dengan statement SELECT dari cursor.

Result table diproses seperti sebuah data set yang berurutan. Cursor harus dibuka(dengan

statement OPEN) sebelum baris lainnya di-retrieved. Statement FETCH digunakan untuk

me-retrieve baris terakhir cursor. FETCH dapat dijalankan berkali-kali sampai semua baris

di-retrieved. Ketika sudah sampai pada data terakhir, cursor harus ditutup dengan statement

CLOSE.

5.1CONTOH DEKLARASI CURSOR

Cursor yang dideklarasikan di dalam Store Procedure dapat diproses seperti halnya cursor pada

konvensional program.

DECLARE c1 CURSOR FOR select * from staff; DECLARE c1 CURSOR WITH HOLD

FOR select * form staff; DECLARE c1 CURSOR

WITH RETURN TO CALLER

FOR select * from staff; DECLARE c1 CURSOR

WITH RETURN TO CLIENT

(2)

WITH HOLD – Mendeklarasikan cursor menggunakan WITH HOLD clause akan menyebabkan cursor mempertahankan posisinya dan beberapa lock melewati transaksi.

Ketika cursor dideklarasikan dengan WITH HOLD, resource tidak dibebaskan pada

saat COMMIT. Jika cursor tidak dideklarasikan dengan WITH HOLD clause, semua

resource dibebaskan ketika COMMIT atau ROLLBACK.

WITH RETURN – clause ini mengindikasikan bahwa cursor yang dideklarasikan akan menghasilan result set.

TO CALLER – Merupakan default dan menetapkan bahwa cursor dapat mengembalikan result set ke pemanggil. Cotohnya, jika pemanggil adalah Store

Procedure lain, result set dikembalikan ke store procedure tersebut. Jika pemanggil

adalah aplikasi client, result set dikembalikan ke aplikasi client. Result set dari

RETURN TO CALLER hanya tampak ke program yang terletak pada sebelum level

bersarang.

TO CLIENT – Menetapkan bahwa cursor dapat mengembalikan result set ko aplikasi client. Cursor ini idak terlihat pada semua intermediate nested procedure.

TO CALLER clause dan TO CLIENT clause berarti hanya pada konteks nested SQL procedure. Hanya saja row yang tidak terbaca dilewati. Contohnya, jika result set dari cursor

adalah 500 row, dan 150 dari row tersebut telah dibaca oleh procedure ketika procedure

diakhiri, row 151 sampai row 500 akan dikembalikan ke pemanggil atau aplikasi.

5.1.1 Cursor dalam sebuah SQL Procededure

Cursor dapat didefinisikan di dalam stored procedure. Stored procedure

DB2ADMIN.Sample1 menerima satu input parameter, in_Dept. Sebuah Cursor

cursor1 didefinisikan dan akan berisi sebuah barisdari table ORG dimana parameter

input sama dengan DEPRNUMB. Result set yang dikembalikan oleh stored

procedure akan berisi DEPTNUMB, MANAGER, dan LOCATION untuk

(3)

5.1.2 Contoh Cursor

Contoh di atas merupakan stored procedure yang mendeklarasikan local cursor.

Karena tidak ditentukan dengan WITH RETURN, cursor akan ditutup oleh database

manager ketika store procedure selesai. Tanpa kode tambahan pada stored procedure,

maka cursor tersebut tidak berguna.

Contoh cursor di atas merupakan local cursor karena tidak ada WITH

RETURN clause, dan tidak ada result set dibuat. Stored procedure tersebut

menggunakan FETCH untuk proses cursor pada select sebuah job untuk user dengan CREATE PROCEDURE Sample1(

--SQL Stored Procedure ---

---

P1: BEGIN

DECLARE cursor1 CURSOR WITH RETURN FOR

SELECT DEPTNAME, MANAGER, LOCATION FROM ORG

WHERE DEPTNUMB = in_Dept;

----

OPEN cursor1;

END P1

CREATE PROCEDURE Cur_Samp (

IN v_name VARCHAR(254),

OUT v_job VARCHAR(5)

)

LANGUAGE SQL

P1: BEGIN

DECLARE c1 CURSOR FOR

SELECT JOB FROM STAFF

WHERE NAME = v_name;

OPEN c1;

FETCH c1 INTO v_job;

(4)

nama tertentu, dan mengembalikan nilai dari job ke program yang memanggil

melalui parameter OUT.

5.2 POSITIONED DELETE

Cursors dapat digunakan untuk menghapus data pada posisi cursor saat itu selama cursor

deletable. Sebuah cursor dinyatakan deletable ketika :

Setiap FROM clause dari outer fullselect me-refer hanya pada satu table.

Outer fullselect tidak mengandung VALUES, GROUP BY, atau HAVING clause dan tidak mengandung fungsi kolom.

Daftar select pada outer fullselect tidak mengandung DISTINCT.

Select – statement tidak mengandung ORDER BY atau FOR READ ONLY clause.

Cursor didefinisikan secara statis, atau terdapat FO UPDATE clause.

Ketika cursor dideklarasikan dapat dispesifikasikan operasi jenis apa yang akan dilakukan.

Jika tidak menyediakan spesifikasi serupa, cursor di – refer sebagai ambigu, dab DB2 hanya

akan menyediakan optimisasi minor. Menentukan type cursor dengan menyediakan FOR

READ ONLY atau FOR UPDATE clause dalam SELECT statement pada cursor.

5.3 POSITIONED UPDATE

Dalam sebuah positioned update, cursor harus updatable. cursor updatable jika semua

pernyataan berikut benar : cursormerupakan deletable.

Kolong yang diupdate berubah pada kolom pada table asal

CREATEPROCEDURE pos_del()

DYNAMICRESULTSETS 1

P1: BEGIN

DECLARE v_DEPTNUMB SMALLINT;

DECLARE v_DEPTNAME VARCHAR(14);

DECLARE v_LOCATION VARCHAR(13);

DECLARE cursor1 CURSORFOR

SELECT DEPTNUMB, DEPTNAME, LOCATION

FROM DB2ADMIN.ORG FORUPDATE;

--OPEN cursor1;

--FETCHFROM cursor1 INTO v_DEPTNUMB, V_DEPTNAME, v_LOCATION;

DELETEFROM DB2ADMIN.ORG

WHERECURRENTOF cursor1;

CLOSE cursor1;

(5)

Semua kolom yang diupdate harus ditentukan secara explisit atau implisit dalam FOR UPDATE clause.

5.4 MENGGUNAKAN PROSES CURSOR UNTUK MENGEMBALIKAN MULTIPLE

RESULT SETS

Stored procedures dibuat untuk mengembalikan multiple result sets pada aplikasi client

(pemanggil) memerlukan :

AdanyaDYNAMIC RESULT SETS clause pada CREATE PROCEDURE statement.

Mendeklarasikan cursor untuk setiap result set dengan RETURN.

Meninggalkan semua cursor terbuka untuk mengambalikan result set ke aplikasi client (pemanggil).

CREATEPROCEDURE pos_upd()

DYNAMICRESULTSETS 1

P1: BEGIN

DECLARE v_DEPTNUMB SMALLINT;

DECLARE v_DEPTNAME VARCHAR(14);

DECLARE v_LOCATION VARCHAR(13);

DECLARE cursor1 CURSORFOR

SELECT DEPTNUMB, DEPTNAME, LOCATION

FROM DB2ADMIN.ORG FORUPDATEOF DEPTNAME;

--OPEN cursor1;

FETCHFROM cursor1 INTO v_DEPTNUMB, V_DEPTNAME, v_LOCATION;

UPDATE ORG SET DEPTNAME = 'NEW NAME'

WHERECURRENTOF cursor1;

(6)

5.5 CURSOR MEMPENGARUHI LOCKING Lock Modes:

S(Share) Lock

 Rows, tables

o Pemilik dan aplikasi yang bersamaan dapat membaca, tidak meng-update.

U(Update) Lock

 Rows, tables

o Pemilik dapat meng-update. Aplikasi yang bersamaan dapat membaca data

dalam objek yang dikunci, tidak meng-update.

X(Exclusive) Lock

 Rows, tables

o Pemilik dapat membaca dan meng-update. Aplikasi uncommitted read yang

bersamaan dapat membaca data dalam objek yang terkunci.

CREATEPROCEDURE MULTIPLE_RESULTS ( )

DYNAMICRESULTSETS 2

DECLARE cursor1 CURSORWITHRETURNFOR

SELECT DEPTNAME

FROM ORG;

--Declare cursors2

DECLARE cursor2 CURSORWITHRETURNFOR

SELECTDISTINCT DIVISION

FROM ORG;

--Cursor left open for client application

OPEN cursor1;

--Cursor left open for client application

OPEN cursor2;

(7)

Cursor dalam stored procedure dapat mempengaruhi aplikasi lain yang mengakses objek

yang sama. Ketika table diakses, DB2 meletakkan lock pada table dan/atau row. Lock

merubah keadaan dari yang akan mencegah siapapun membaca data dalam table untuk

sebuah row lock terakhir selama membaca row tersebut. Type lock yang digunakan DB2

bergantung pada type cursor yang digunakan dan DB2 isolation level.

5.6 ISOLATION LEVEL

 Uncommitted Read (UR)

Dirty Read: Mengabaikan semua kunci pada baris dan table, mengijinkan aplikasi untuk

membaca uncommitted data.

 Cursor Stability (CS)

Default (maximum concurrency): Menjaga current row dari pembacaan atau update dari

perubahan oleh aplikasi lain.

 Read Stability (RS)

RS isolation mengijinkan aplikasi untuk membaca pages yang sama atau baris lebih

dari satu kali ketika mencegah proses lain dari mengubah row.

 Repeatable Read (RR)

Baris yang di-refer sebuah aplikasi tidak dapat diupdate oleh aplikasi lain sebelum

(8)

LATIHAN

1. Buatlah tabel pegawai yang memiliki struktur seperti tabel employee. kemudian buat

prosedur dengan nama multiple_4digitnimbelakang dengan ketentuan :

 prosedur terdiri dari 2 result sets

 buat cursor untuk memasukkan data dari tabel employee ke tabel pegawai (gunakan perulangan while atau loop)

 result set 1 menampilkan pesan berhasil insert

 result set 2 menampilkan semua data pegawai

2. Buatlah prosedur yang berfungsi untuk mengupdate salary pegawai tertentu dengan

Referensi

Dokumen terkait

Perbedaan pendapat hakim dalam melaksanakan persidangan pada kasus kesusilaan dikarenakan aturan yang kurang jelas, padahal sebenarnya sudah jelas disebutkan di dalam

Setelah dilakukan analisis level risiko dan pengelompokan pada seluruh variabel risiko dari pekerjaan pemasangan kaca dan tangga yang telah dilakukan sebelumnya,

Undang-Undang Darurat Republik Indonesia Nomor 1 Tahun 1951 (Lembaran Negara Republik Indonesia Tahun 1951 Nomor 9, Tambahan Lembaran Negara Republik Indonesia

Beban kerja dapat dibedakan lebih lanjut ke dalam beban kerja berlebih/terlalu sedikit “kuantitatif”, yang timbul sebagai akibat dari tugas-tugas yang terlalu

2) Guru bersama dengan peserta didik mengidentifikasi kelebihan dan kekurangan kegiatan pembelajaran (yaitu kegiatan mengumpulkan informasi dengan cara …, menjawab pertanyaan

Hasil menunjukkan curah hujan tinggiterjadi sepanjang tahun 2010 (musim kemarau tidak terjadi), terjadi kekacauan fenologi yang sebelumnya tanaman jeruk berbunga 1 sampai 3 kali

Untuk membuat kamus digital yang menyediakan fungsi-fungsi dalam pencarian antonim dan sinonim kata tersebut pada Microsoft Visual Basic 6.0 penulis menggunakan aplikasi yang

Efektivitas Ekstrak Daun Paci-paci Leucas lavandulaefolia untuk Pencegahan dan Pengobatan Penyakit MAS Motile Aeromonad Septicemia Ditinjau dari Patologi Makro