Anda di halaman 1dari 65

MATERI: ACTIVE DATABASE

TEKNOLOGI BASIS DATA


Pertemuan 2
E-C-A MODEL
 Algoritma E-C-A Model
EVENT
 Event adalah kejadian yang berlangsung pada suatu
waktu tertentu.
 Primitive Events  kejadian yang telah ditentukan:
 Database Events Operasi manipulasi basis data (Update,
Insert, Delete, Retrieval)
 Temporal Events  kejadian dengan syarat tertentu (i.e proses
B terjadi 5 menit setelah proses A)
 Explicit Events  kejadian external diluar basis data
 CompositeEvents  Kumpulan dari primitive events yang
dihubungkan dengan operator logika seperti and atau or
CONDITION
 Kondisi  apakah aturan dari action harus
dieksekusi
 Jika bernilai true  eksekusi jika bernilai
false  tidak akan dieksekusi
ACTION
 Action dilakukan setelah kondisi terpenuhi.
 Action dapat berupa sebuah query (insertion,
update, deletion, retrieval) atau berupa
pemanggilan ke fungsi atau prosedur yang
lain.
EXECUTION MODEL
 Coupling Mode
 ImmediateTransaksi akan ditunda sampai condition selesai
dievaluasi dan action selesai dieksekusi. Selain itu, action
juga tidak tergantung kepada hasil dari evaluasi kondisi.
 DeferredCondition dan action dijalankan ketika triggering
transaction berakhir
 DetachedCondition dan action dijalankan di dalam satu
atau transaksi yang berbeda.
 Cascade Trigerring
 Priority Mode
Example: Ralway Database
EXAMPLE
MATERI: STRORED PROCEDURE
TEKNOLOGI BASIS DATA
Pertemuan 3 & 4
STORED PROCEDURE
 Stored Procedure memiliki nama, parameter, dan dapat
diisi banyak perintah SQL
 memilik, variabel lokal, error handling, loop, dan
kondisi IF
 CREATE PROCEDURE procedure1()
 BEGIN
 /* procedure body */
 END;
 Pemanggilan stored procedure dilakukan dengan
perintah CALL
 CALL procedure1();
DELIMITER
 adalah karakter atau string yang digunakan
untuk memberitahu MySQL bahwa pengetikan
suatu statemen SQL telah selesai. “;”
 Untuk membedakan akhir dari stored
procedure dan statemen SQL, perlu
dilakukan perubahan delimiter.
 Misalnya dengan menggunakan “//” atau “$
$”.
 DELIMITER //
 CREATE PROCEDURE procedure1()
 BEGIN
 SQLStatement1;
 SQLStatement2;
 END//
 DELIMITER ;
CREATE PROCEDURE
 CREATE PROCEDURE p1 () SELECT *
FROM t;
 stored procedure dengan nama p1
 berisi statemen SELECT * FROM t
 BEGIN dan END tidak diperlukan di sini
karena statemen tunggal.
STORED PROCEDURE
 Nama stored procedure tidak case sensitif, jadi p1 dan P1
adalah sama.
 Tidak boleh menggunakan dua stored procedure dengan nama
yang sama dalam MySQL.
 Boleh menggunakan bentuk
“nama_database.nama_stored_procedure”, misalkan db4.sp1.
 Boleh menggunakan spasi, dengan catatan harus berada
diantara tanda “`”. Panjang tidak lebih dari 64 karakter.
 CREATE PROCEDURE `long p1`()
 SELECT * FROM t;
 CALL `long p1`();
PROCEDURE BODY
 Semua DML dan DDL statemen pada level
tabel boleh digunakan dalam procedure
body. Yang tidak diperbolehkan antara lain:
CREATE PROCEDURE, ALTER PROCEDURE,
DROP PROCEDURE, CREATE FUNCTION, DROP
FUNCTION, CREATE TRIGGER, DROP
TRIGGER.
VARIABLES
 Variabel diletakkan di dalam procedure body
(diantara BEGIN dan END).
 Deklarasi variable diawali dengan DECLARE.
 Variabel dapat diberikan nilai DEFAULT.
 Dalam tiap blok BEGIN-END, dapat
digunakan variabel yang sama.
 Variable a (system variables) berbeda dengan
variable @a (user defined variable)
VARIABLES
 Variable a hanya dapat digunakan di dalam
STORED PROCEDURE
 Bersifat local
 Harus menggunakan DECLARE
 Variable @a dapat digunakan dimana saja
 Bersifat global
VARIABLES
VARIABLES
 DELIMITER //
 CREATE PROCEDURE prc_test ()
 BEGIN
 DECLARE var2 INT DEFAULT 1;
 SET var2 = var2 + 1;
 SELECT var2;
 END//
 DELIMITER ;
VARIABLES
 DELIMITER //
 CREATE PROCEDURE p1()
 BEGIN
 DECLARE a INT;
 DECLARE b INT DEFAULT 5;
 SET a = 10;
 SET a = a * b;
 SELECT a;
 END//

 CALL p1();
 DELIMITER //
 CREATE PROCEDURE prc_test ()
 BEGIN
 DECLARE var2 INT DEFAULT 1;
 SET var2 = var2 + 1;
 SET @var2= 10;
 SET @var2 = @var2 + 1;
 SELECT var2, @var2;
 END//
 DELIMITER ;
VARIABLES
 DELIMITER //
 CREATE PROCEDURE p1()
 BEGIN
 DECLARE x1 CHAR(5) DEFAULT 'outer';
 BEGIN
 DECLARE x1 CHAR(5) DEFAULT 'inner';
 SELECT x1;
 END;
 SELECT x1;
 END //

 DELIMITER ;
 CALL p1();

 Output?
VARIABLES
PARAMETER
 Stored Procedure memiliki 3 jenis parameter
yaitu IN, OUT, dan INOUT.

 CREATE PROCEDURE p1 (IN


parameter1 INTEGER, OUT
parameter2 varchar)
 SELECT * FROM t;
PARAMETER
 IN digunakan untuk menandai bahwa parameter digunakan
sebagai input.

 DELIMITER //
 CREATE PROCEDURE p1 (IN i1 INTEGER)
 BEGIN
 DECLARE a INT DEFAULT 5;
 SET a = a * i1;
 SELECT a;
 END//

 DELIMITER ;
 CALL p1(5);
PARAMETER
 OUT digunakan untuk menandai bahwa parameter digunakan
sebagai output.

 DELIMITER //
 CREATE PROCEDURE p2 (OUT o1 INTEGER)
 BEGIN
 DECLARE b INT DEFAULT 5;
 SET o1 = b;
 END//

 DELIMITER ;
 CALL p2(@a);
 SELECT @a;
PARAMETER
 INOUT digunakan untuk menandai bahwa parameter digunakan
sebagai input sekaligus output.

 DELIMITER //
 CREATE PROCEDURE p1 (INOUT io1 FLOAT)
 BEGIN
 SET io1 = io1 * pi();
 END//

 DELIMITER ;
 SET @a=7;
 CALL p1(@a);
 SELECT @a;
IF … THEN … ELSE
 CREATE PROCEDURE p12 (IN parameter1 INT)
 BEGIN
 DECLARE variable1 INT;
 SET variable1 = parameter1 + 1;
 IF variable1 = 0 THEN
 INSERT INTO t VALUES (17);
 END IF;
 IF parameter1 = 0 THEN
 UPDATE t SET s1 = s1 + 1;
 ELSE
 UPDATE t SET s1 = s1 + 2;
 END IF;
 END; //
CASE … ELSE
 CREATE PROCEDURE p13 (IN parameter1 INT)
 BEGIN
 DECLARE variable1 INT;
 SET variable1 = parameter1 + 1;
 CASE variable1
 WHEN 0 THEN INSERT INTO t VALUES (17);
 WHEN 1 THEN INSERT INTO t VALUES (18);
 ELSE INSERT INTO t VALUES (19);
 END CASE;
 END; //
WHILE … END WHILE
 CREATE PROCEDURE p14 ()
 BEGIN
 DECLARE v INT;
 SET v = 0;
 WHILE v < 5 DO
 INSERT INTO t VALUES (v);
 SET v = v + 1;
 END WHILE;
 END; //
REPEAT … END REPEAT
 CREATE PROCEDURE p15 ()
 BEGIN
 DECLARE v INT;
 SET v = 0;
 REPEAT
 INSERT INTO t VALUES (v);
 SET v = v + 1;
 UNTIL v >= 5 END REPEAT;
 END; //
LOOP … END LOOP
 CREATE PROCEDURE p16 ()
 BEGIN
 DECLARE v INT;
 SET v = 0;
 loop_label: LOOP
 INSERT INTO t VALUES (v);
 SET v = v + 1;
 IF v >= 5 THEN
 LEAVE loop_label;
 END IF;
 END LOOP;
 END; //
ITERATE
 CREATE PROCEDURE p20 ()
 BEGIN
 DECLARE v INT;
 SET v = 0;
 loop_label: LOOP
 IF v = 3 THEN
 SET v = v + 1;
 ITERATE loop_label;
 END IF;
 INSERT INTO t VALUES (v);
 SET v = v + 1;
 IF v >= 5 THEN
 LEAVE loop_label;
 END IF;
 END LOOP;
 END; //
CURSOR
 Cursor adalah fitur dari stored procedure.
Cursor mampu melakukan iterasi sepanjang
row data dari suatu tabel.
 Penggunaan cursor tidak disarankan selama
masih ada cara lain, karena relatif lambat.
CURSOR
 Misalkan terdapat sebuah tabel member yang
berisi id_member dan nama.
 Tabel member tersebut berelasi dengan
tabel transaksi yang berisi id_transaksi dan
jumlah tiap transaksi.
CURSOR
 Seorang DBA ditugaskan membuat laporan
tahunan dengan menghitung total transaksi
tiap member.
 Buat tabel baru (temporary) yang berkolom
id_new, nama_new, dan jumlah_new.
 Tabel ini untuk menampung id, nama, dan
total transaksi member.
 Total pembelian dapat diperoleh dengan
perintah sum().
 SELECT sum(jumlah) from tb_transaksi
where id_member=???
 Masalah:
 Bagaimana bisa mendapat id nya dan
 Bagaimana mengambil hasil sum() nya.
 Buat stored procedure dengan IN dan OUT.

 DELIMITER //
 CREATE PROCEDURE counttotal(IN id INTEGER, OUT ct INTEGER)
 BEGIN
 SET ct:= (SELECT SUM(jumlah) FROM transaksi WHERE id_member=id);
 END//
 DELIMITER ;

 CALL (1,@a);

 Ketika prosedur ini dipanggil, dengan id_member sebagai input, akan


menghasilkan total jumlah yang bersesuaian.
 Selesai?
 DELIMITER //
  
 CREATE PROCEDURE cursor1 ()
 BEGIN
 DECLARE id_c INT;
 DECLARE nama_c VARCHAR(100);
 DECLARE done INT DEFAULT 0;
 DECLARE prodrecord
 CURSOR FOR SELECT id_member, nama FROM member ORDER BY id_member;
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 OPEN prodrecord;
 WHILE NOT done DO
 FETCH prodrecord INTO id_c, nama_c;
 CALL counttotal(id_c,@a);
 IF @a IS NULL THEN
 SET @a=0;
 END IF;
 IF NOT done THEN
 INSERT INTO curtest VALUES (id_c, nama_c, @a);
 END IF;
 END WHILE;
 CLOSE prodrecord;
 END//
 DELIMITER ;
  
 CALL cursor1();
CURSOR
 DECLARE id_c INT;
 DECLARE nama_c VARCHAR(100);
 DECLARE done INT DEFAULT 0;
 DECLARE prodrecord
 CURSOR FOR SELECT id_member, nama FROM member
ORDER BY id_member;
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET
done = 1;

 Deklarasi harus dilakukan berurutan dari deklarasi


variabel, cursor, kemudian handler.
 DECLARE prodrecord
 CURSOR FOR SELECT id_member, nama FROM
member ORDER BY id_member;
 dibuat cursor yang berisi id_member dan nama. Tidak
selalu harus seluruh kolom, boleh hanya data yang
diperlukan.

 DECLARE CONTINUE HANDLER FOR SQLSTATE


'02000' SET done = 1;
 Dibuat handler ketika pembacaan row mencapai akhir
 OPEN prodrecord;
 Open cursor

 FETCH prodrecord INTO id_c,


nama_c;
 Masukkan nilai cursor ke dalam variabel
id_c dan nama_c
 CALL counttotal(id_c,@a);
 Panggil stored procedure untuk menghitung jumlah
total dengan parameter IN id_c dan OUT @a.

 IF NOT done THEN


 INSERT INTO curtest VALUES (id_c,
nama_c, @a);
 END IF;
 Masukkan data ke dalam tabel baru.
 CALL cursor1()
 SP dengan salah satu LOOP dan salah satu
KONDISI serta CURSOR (biasa atau cursor
dalam cursor) dan TRIGGER (after insert
update delete)

Anda mungkin juga menyukai