Pertemuan IV CONDITION & HANDLER CURSOR

dokumen-dokumen yang mirip
Pertemuan VI F U N C T I O N

Pertemuan I KONSEP DASAR STORED ROUTINES

Pertemuan V FLOW CONTROL

Cursor. M. Saefudin SKom, MMSI

BAB VIII FUNGSI, PL/PGSQL dan TRIGER

Mengenal MySQL Stored Procedure

Kontrak Kuliah. Stored Procedures and Function. Edi Sugiarto, S.Kom, M.Kom

Membuat Function, Stored Procedur dan View pada MySQL

TRIGGER TRIGGER 5/29/2017 HANI IRMAYANTI, S.KOM

Modul 6 Function dan Trigger

STRUCTURE QUERY LANGUAGE (SQL)

Pertemuan VII TRIGGERS

Basis Data 2. Procedure dan Function Database. Arif Basofi, S.Kom. MT. Teknik Informatika, PENS

1. Mengetahui dan mengerti CURSOR 2. Mampu mengimplementasikan CURSOR dalam pemrograman di Oracle

STORE PROCEDURE. Pemrograman Client Server Sarji, S.Kom Studi kasus pada

Praktikum Basis Data 2017 TE UM MODUL 8 TRIGGER A. TUJUAN

BAB 4 MEMBUAT LIST OF VALUE (LOV) DAN NON-BASE TABLE FIELDS

Pertemuan IX MANAJEMEN TRANSAKSI

BAB V CURSOR AND RESULT SETS

Pengertian. Mengapa SP? Mengapa SP? 07/05/2012 STORED PROCEDURE

Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert dibawah ini:

Modul 2. Database Menggunakan Primary Key, Unique, Auto Increment, Alter-Add dan Alter-Drop. Disusun oleh. Sri Siska Wirdaniyati JURUSAN STATISTIKA

Praktikum TRIGGER. Tujuan :

Persiapan Table Untuk Latihan Sebelum kita berkenalan lebih jauh dengan Trigger, mari kita buat terlebih dahulu, struktur table yang dibutuhkan.

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET PEMROGRAMAN WEB Semester: 2 MYSQL 200 menit No.: Job: 12 Tgl: Hal.

3.1 Form Wizard. 3. Pilihlah menu use data block wizard dan tekanlah button OK, maka akan tampil window di bawah ini.

Pemrograman Web Lanjut 2017

Bab 5. Database Trigger POKOK BAHASAN: TUJUAN BELAJAR: 5.1. PENDAHULUAN

PERTEMUAN 9 MANIPULASI DATA

P - 7 Pembahasan UTS PSIK V

Pengenalan Structured Query Language

MUKADDIMAH TEORI ASUMSI TABEL. CREATE TABLE contoh ( kode CHAR(5), nama VARCHAR(50) )

Constraint dan Manajemen Data dalam Timezone Berbeda

Mudafiq Riyan Pratama

Basis Data Relational

MODUL I PENGENALAN MYSQL

Modul 3 : Query Penggabungan Tabel

Kontrak Kuliah. Trigger dan Scheduled Events. Edi Sugiarto, S.Kom, M.Kom

MySQL Databases. Dasar-dasar MySQL dan Implementasi MySQL kedalam pemrograman PHP. Jakarta, 16 April 2011 Oleh: M. Awaludin, S.Kom

PL / SQL. Arif Basofi

TUGAS I PRAKTIKUM SISTEM BASIS DATA. Nama: Krisna Pandu Wibowo( )

1. Kompetensi Memahami Store Procedure dan Function yang tidak lain merupakan perintahperintah SQL yang diletakkan di dalam server database.

STRUCTURE QUERY LANGUAGE DDL & DML

Basis Data II. Pertemuan Ke-9 dan ke-10 (Stored Procedure dan Trigger) Noor Ifada S1 T. Informatika - UTM (2012) 1

Database Systems: Lab. Actvity 1: Database Design. Merancang Database. Merancang Database. Tipe Tabel MySQL.

Contoh 3.1: Membuat suatu store procedure supaya menghapus semua pertandingan pemain berdasarkan nomor pemain yang ditentukan.

PRAKTIKUM BASIS DATA TERDISTRIBUSI MODUL 4 SINKRONISASI DATA

Kuliah Online : TEKKOM [2013/VI]

FILE RELATIF. Sama dengan IDENTIFICATION DIVISION pada organisasi file secara sequential maupun organisasi file secara indeks.

BAB III ANALISIS DAN PERANCANGAN

Pertemuan 12 Pengenalan Structured Query Language

SEKOLAH TINGGI TEKNOLOGI INDONESIA TANJUNG PINANG

Transaction dan Trigger. M. Saefudin SKom, MMSI

Computer Science, University of Brawijaya. Putra Pandu Adikara, S.Kom. Trigger. Basis Data 2

E-trik Ajax. Database MySQL. Dedi Alnas

PHP Accessing MySQL Database. Fajar Pradana S.ST., M.Eng

IMPLEMENTASI TRIGGER, STORED PROCEDURE, FUNCTION DAN VIEW PADA MYSQL DALAM PERANCANGAN SYSTEM INVENTORY CAFFE BOULEVARD JAYAPURA

Mahasiswa mengetahui & memahami mengenai DML, DCL di SQL. (Isi_Field_1, Isi_Field_2,, Isi_Field_N) ;

INTEGRITAS BASIS DATA. OLEH : Slamet Sn Wibowo Wicaksono

Data Manipulation Language (DML) & Data Control Language (DCL) pada Database

MODUL PEMPROGRAMAN SQL TINGKAT DASAR 1 STANDAR KOMPETENSI: MENERAPKAN BAHASA PEMPROGRAMAN SQL TINGKAT DASAR SMK NEGERI 1 MAJALENGKA

CARA MENGGUNAKAN SELECT QUERY PADA MYSQL

Stored Procedure. M. Saefudin SKom, MMSI

SQL (Structure Query Language) Gentisya Tri Mardiani, S.Kom

FILE RELATIF. Sama dengan IDENTIFICATION DIVISION pada organisasi file secara sequential maupun organisasi file secara indeks.

APLIKASI KONVERSI FLOWCHART KE KODE PROGRAM BAHASA PEMROGRAMAN PL/SQL MYSQL

PROCEDURE DIVISION (lanjutan)

Praktikum TRANSACT SQL. Tujuan : Praktikan mampu untuk mengerti dan memahami Transact-SQL

Transact-SQL (Trigger- Event, Store Procedure)

SISTEM BASIS DATA. Oleh : Devie Rosa Anamisa

Jobsheet SQL Dasar : Hari Zulianto, ST [Year]

Contoh SQL Constraint

BAB 3 FILE SEQUENTIAL, FILE INDEKS DAN FILE RELATIF

BAB II PEMBUATAN DAN MANAJEMEN TABLE

Modul Pembangunan Aplikasi Basis Data Lanjut 2014

Basis Data. Bagian IV SQL (3) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Pemrograman Web. Koneksi dan Manipulasi Basis Data. 7 Adam Hendra Brata

KapitaSelekta. (KBKI82127, 2 sks) Materi : Pengenalan MySQL

KURSUS ONLINE JASA WEBMASTERS

B a s i s D a t a C H A P T E R. SQL Operasi DML. Arif Basofi PENS 2015

TRIGGER. Tujuan Mata Kuliah. Tools yang digunakan. Sesi7 : TRIGGER. Praktikum Pemrograman Client Server Database Hadi Kusumah, S.T.

MODUL 4 INTERNET PROGRAMMING DATABASE

Untuk menjalankan Mysql secara konpensional jalankan Mysql.exe pada direktori Mysql\Bin. Akan tampak tampilan sebagai berikut:

MODUL III STRUCTURED QUERY ANGUAGE (SQL)

LAMPIRAN. 1) Membuat database baru untuk menampung data warehouse, yang bernama

Oracle Academic Initiative

MODUL 5 INTERNET PROGRAMMING : MySQL

Contoh SQL Constraint

JDBC. Imam Fahrur Rozi

2. Sub Kompetensi Dapat menggunakan dan mengimplementasikan View.

SISTEM BASIS DATA 1. WAHYU PRATAMA, S.Kom., MMSI.

MODUL 9 WEB PROGRAMMING : MySQL

MODUL 1 Pengenalan MySQL, DDL, DML

DATABASE RUMAH SAKIT 1. Objek yang dipakai a. Pasien b. Dokter c. Ruang d. Petugas e. Rawat_inap f. Pembayaran

DATABASE - MySQL. Muhammad Zen S. Hadi, ST. MSc.

PRAKTIKUM PL/SQL (Trigger) OLEH : WIRATMOKO YUWONO, ST

Praktikum Basis Data 2017 TE UM

Perangkat Lunak Pengembangan Web

JobsheetTEUM MODUL VI TRIGGER

B a s i s D a t a - 1 C H A P T E R. SQL Operasi DML. Copyright 2005 PENS-ITS

Transkripsi:

Pertemuan IV CONDITION & HANDLER CURSOR

TUJUAN 1. Mahasiswa dapat memahami tentang berbagai kondisi yang mungkin terjadi karena suatu kesalahan tertentu 2. Mahasiswa dapat menangani berbagai kondisi kesalahan. 3. Mahasiswa dapat memahami tentang konsep cursor dan pemakaiannya.

DECLARE Conditions Terdapat kondisi-kondisi tertentu yang perlu untuk ditangani secara khusus. Kondisi-kondisi tersebut berhubungan dengan kesalahan, seperti aliran control dalam sebuah routine. Syntak untuk DECLARE conditions DECLARE condition_name CONDITION FOR condition_value dimana: condition_value : SQLSTATE [VALUE] sqlstate_value mysql_error_code Condition_value dapat berupa SQLSTATE value atau mysql_error_code.

DECLARE Handler Syntak untuk DECLARE handlers DECLARE handler_type HANDLER FOR condition_value[, ] statement Dimana: handler_type : CONTINUE EXIT UNDO condition_value: SQLSTATE [VALUE] sqlstate_value condition_name SQLWARNING NOT FOUND SQLEXCEPTION mysql_error_code

DECLARE Handler (cont) DECLARE.. HANDLER menangani satu atau banyak kondisi yang terjadi. Jika satu dari beberapa kondisi terjadi, maka statement akan dijalankan. Statement dapat berupa statement yang sederhana (sebagai contoh, SET var_name=value) atau dapat juga terdiri dari beberapa statement yang ditulis dengan menggunakan BEGIN dan END. Jika menggunakan handler CONTINUE, statement akan dijalankan setelah eksekusi dari statement handler walaupun kondisi tertentu menyebabkan kesalahan. Untuk handler EXIT, eksekusi akan dihentikan dan keluar dari statement BEGIN.... END dimana handler dideklarasikan. Jika suatu kondisi terjadi dan tidak ada handler yang dideklarasikan, maka default aksinya adalah EXIT.

DECLARE Handler (cont) Condition_value dapat berupa: Nilai dari SQLSTATE atau MYSQL error code Nama kondisi yang sudah didefinisikan sebelumnya dalam DECLARE CONDITION SQLWARNING adalah singkatan dari seluruh kode SQLSTATE yang diawali dengan 01. NOT FOUND adalah singkatan dari seluruh kode SQLSTATE yang diawali dengan 02. SQLEXCEPTION adalah singkatan dari seluruh kode SQLSTATE yang tidak dapat ditangani oleh SQLWARNING maupun NOT FOUND.

Kasus : Jika kita hendak memasukan data ke dalam sebuah tabel dan pada salah satu fieldnya diset sebagai primary key. Maka data yang masuk tidak boleh sama untuk field yang diset sebagai primary key. Jika data tersebut dipaksakan masuk apa yang akan terjadi??

Langkah yang dilakukan dengan penggunakan CONDITION..HANDLER 1. Buat tabel contoh4_1 dengan 1 field diberi nama t, bertipe int diset sebagai primary key. 2. Buat prosedur dengan nama sptanpahandler() DELIMITER $$ CREATE PROCEDURE `pbd`.`sptanpahandler` () BEGIN END$$ set @x=1; insert into pbd.latih4_1 value(1); set @x=2; insert into pbd.latih4_1 value(1); set @x=3; DELIMITER ; call sptanpahandler(); select @x; Pesan apa yang terjadi? Berapa nilai @x??

Langkah.. (cont) 3. Buat prosedur dengan nama spcontinue DELIMITER $$ DROP PROCEDURE IF EXISTS `pbd`.`spcontinue`$$ CREATE PROCEDURE `spcontinue`() BEGIN DECLARE CONTINUE HANDLER FOR 1062 SET @x=5; set @x=1; insert into pbd.t value(2); set @x=2; insert into pbd.t value(2); set @x=3; END$$ DELIMITER ; call spcontinue(); select @x; Apakah terjadi error??? Berapakah nilai @x??

Langkah.. (cont) 4. Buat prosedur dengan nama spexit DELIMITER $$ DROP PROCEDURE IF EXISTS `pbd`.`spexit`$$ CREATE PROCEDURE `spexit`() BEGIN DECLARE CONTINUE HANDLER FOR 1062 SET @x=5; set @x=1; insert into pbd.t value(3); set @x=2; insert into pbd.t value(3); set @x=3; END$$ DELIMITER ; call spexit(); select @x; Apakah terjadi error??? Berapakah nilai @x??

CURSOR Tentang Cursor Setiap kali perintah SQL dieksekusi oleh Server, maka akan memiliki sebuah cursor tertentu yang akan dihubungkan dengan perintah SQL tersebut. Terdapat dua jenis tipe kursor yaitu: Implisit cursor yang dideklarasikan untuk seluruh perintah DML dan perintah SELECT pada PL/SQL, termasuk query yang menghasilkan hanya satu record saja. Implisit cursor akan otomatis terbentuk. Eksplisit cursor adalah cursor yang dideklarasikan dan dinamai oleh pembuat cursor. Dapat digunakan untuk query yang menghasilkan lebih dari satu record. Dapat pula dimanipulasi melakukan statement tertentu dalam block eksekusi

Tentang Cursor (cont) Cursor didukung di dalam store procedure dan function. Cursor memiliki sifat asensitive, read only dan nonscrolling. Asensitive berarti server bisa atau tidak bisa membuat copy ke dalam result table. Read only berarti bahwa hasil dari cursor hanya dapat dibaca. Nonscrolling berarti bahwa cursor hanya dapat bergerak maju setelah sampai pada sebuah record tidak dapat mundur lagi Deklarasi cursor ditempatkan setelah mendeklarasikan varible, handler dan condition.

Eksplisit Cursor Sekumpulan row yang dikembalikan oleh query multiplerow disebut dengan active set. Ukurannya adalah sejumlah record yang sesuai dengan kriteria. Store Procedure akan melakukan open cursor, memproses row yang diperoleh dari sebuah query dan kemudian close cursor.. Fungsi dari eksplisit kursor adalah : a. Dapat memproses record yang dikembalikan oleh query, record per record. b. Dapat men track record yang mana yang sedang diproses. c. Memberikan keleluasaan kepada programmer untuk mengontrol eksplisit kursor secara manual dalam block store procedure.

Eksplisit Cursor (cont) Berikut adalah langkah-langkah yang dilakukan untuk memahami konsep cursor :

Eksplisit Cursor (cont) a. Melakukan deklarasi dengan memberi nama kursor dan mendefiniskan struktur dari query yang digunakan. b. Membuka kursor, open Cursor. Dengan menggunakan statement OPEN akan mengeksekusi query dan membindingnya dengan variabel-variabel yang mereferensinya. Record diidentifikasi oleh query yang dipanggil oleh aktif set dan record akan tersedia untuk difetch.(diambil) c. FETCH data dari cursor. Data yang difetch akan dapat diperoses record per record. Setelah melakukan FETCH akan dicek apakah cursor tersebut berisi record. Jika tidak ada record maka cursor harus ditutup. d. CLOSE cursor. Menggunakan statement CLOSE untuk merelease aktif set dari row. Memungkin untuk membuka kembali kursor dan merefresh aktif set. Jadi akan ada 3 statement yang digunakan untuk mengontrol eksplisit cursor yaitu OPEN, FETCH dan CLOSE.

Sintak untuk Cursor a. Untuk deklarasi cursors DECLARE cursor_name CURSOR FOR select_statement Tidak boleh menggunakan clausa INTO pada select_statement cursor. Jika pemrosesan record membutuhkan urutan tertentu maka dapat menggunakan clause ORDER BY. Banyak deklarasi cursor diijinkan dalam sebuah store procedure, tetapi setiap cursor haruslah memiliki nama yang unik.

Sintak untuk Cursor (cont) b. Untuk statement OPEN cursor OPEN cursor_name Statement ini digunakan untuk membuka cursor setelah dideklarasikan. OPEN statement akan mengeksekusi query yang sesuai dengan deklarasi cursor, mengidentifikasi result set dan menentukan posisi cursor sebelum record pertama.

Sintak untuk Cursor (cont) Operasi yang dilakukan pada saat mengeksekusi statement OPEN adalah: a. Mengalokasikan memori secara dinamik. b. Memparsing statement SELECT c. Membinding variabel input d. Mengidentifikasi aktif set e. Memposisikan pointer segera sebelum record pertama pada aktif set.

Sintak untuk Cursor(cont) c. Untuk statement FETCH cursors FETCH cursor_name INTO var_name [, var_name]... Statement ini digunakan untuk melakukan fetch / mengambil record berikutnya (jika ada record yang ditemukan) dengan menggunakan open cursor dan advance cursor pointer. Petunjuk: 1. Jumlah variabel yang dimasukan ke dalam klausa INTO dari statement FETCH harus sama dengan kolom dalam perintah SELECT, dan pastikan bahwa tipe data juga sesuai. 2. Cocokan setiap variabel dengan kolomnya, posisi harus sama. 3. Ujilah kursor apakah berisi record atau tidak. Jika tidak ada nilai, maka fetch akan meninggalkan proses dalam aktif record dan tidak ada record yang direkam.

Sintak untuk Cursors (cont) Cara kerja FETCH statement: a. Membaca data dari record tertentu ke dalam variabel output PL/SQL. b. Advances pointer ke record berikutnya. FETCH ini digunakan untuk menampilkan nilai dari record tertentu ke dalam variabel output. Setelah dilakukan fetching maka data dalam variabel tersebut dapat dimanipulasi.

Sintak untuk Cursor (cont) d. Untuk statement CLOSE cursor CLOSE cursor_name Statement ini digunakan untuk menutup cursor yang telah terbuka. Statement CLOSE akan membuat kursor menjadi disable, dan aktif set menjadi undefined. Gunakanlah statement ini setelah selesai melakukan proses dengan perintah SELECT. Dapat dilakukan reopen kembali kursor, jika memang dibutuhkan. Setelah statement CLOSE maka tidak dapat melakukan FETCH data kembali. Walaupun memungkinkan untuk tidak menutup block routine dengan closing cursor, akan tetapi jadikan hal ini sebagai sebuah kebiasaan untuk menutup kursor sehingga akan bebas.

Contoh DELIMITER $$ CREATE PROCEDURE curdemo() BEGIN DECLARE done INT DEFAULT 0; DECLARE a CHAR(16); DECLARE b,c INT; DECLARE cur1 CURSOR FOR SELECT id,data FROM pbd.t1; DECLARE cur2 CURSOR FOR SELECT i FROM pbd.t2; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur1; OPEN cur2;

Contoh (cont) REPEAT FETCH cur1 INTO a, b; FETCH cur2 INTO c; IF NOT done THEN IF b < c THEN INSERT INTO pbd.t3 VALUES (a,b); ELSE INSERT INTO pbd.t3 VALUES (a,c); END IF; END IF; UNTIL done END REPEAT; CLOSE cur1; CLOSE cur2; END $$ DELIMITER ;

Contoh (cont) Jika diketahui data untuk T1 : Data1 1 Data2 7 Data3 2 T2 : 2 5 3 8 Berapakah hasil t3??