290 likes | 581 Views
Stored Procedure. MySQL 5. Definisi. Stored procedure adalah kumpulan dari statemen SQL yang digunakan secara bersama-sama. Stored procedure menginjinkan penggunaan statemen SQL lebih dari sekedar statemen SQL biasa untuk meretrieve dan mengupdate database.
E N D
Stored Procedure MySQL 5 seagatejogja@ugm.ac.id
Definisi • Stored procedure adalah kumpulan dari statemen SQL yang digunakan secara bersama-sama. • Stored procedure menginjinkan penggunaan statemen SQL lebih dari sekedar statemen SQL biasa untuk meretrieve dan mengupdate database. • Stored procedure mendukung penggunaan variable, kondisi, flow control dan cursor. • Stored procedure dapat terdiri dari paling tidak satu statemen sampai dengan ratusan/ribuan baris. seagatejogja@ugm.ac.id
Keuntungan • Memungkinkan kita menggunakan beberapa statemen query sekaligus. • Efisiensi hasil query yang diproses/dikirimkan ke klien. • Memberikan interface yang sederhana terhadap data dari klien. • Pengelolaan query menjadi lebih mudah dan terpusat. • Memudahkan ketika adanya proses optimasi dan perubahan pada business proses • Meningkatkankeamanan seagatejogja@ugm.ac.id
Kerugian • Membebani database server • Lebih kelihatan kompleks seagatejogja@ugm.ac.id
Sample Database • Database yang digunakan adalah database Northwind. seagatejogja@ugm.ac.id
Parameter • <create procedure statement> ::= • CREATE PROCEDURE <procedure name> ( [ <parameter list> ] ) • <routine body> • <parameter list> ::= • <parameter specification> [ , <parameter specification> ]... • <parameter specification> ::= • [ IN | OUT | INOUT ] <parameter> <data type> seagatejogja@ugm.ac.id
CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body • proc_parameter: [ IN | OUT | INOUT ] param_nametype • characteristic: • LANGUAGE SQL | • [NOT] DETERMINISTIC | • { CONTAINS SQL | NO SQL | • READS SQL DATA | • MODIFIES SQL DATA } | • SQL SECURITY { DEFINER | INVOKER } | • COMMENT 'string' • routine_body: Valid SQL procedure statements or statements seagatejogja@ugm.ac.id
Contoh • Create procedure tampil_customers() • Select * from customers; • Digunakan untuk menampilkan seluruh data customer; • Call tampil_customers(); seagatejogja@ugm.ac.id
delimiter // create procedure cari_customer(in cust_id varchar(5), out comp_name varchar(40)) begin select companyname from customers where customerid = cust_id into comp_name; end // seagatejogja@ugm.ac.id
Call cari_customer(‘ANTON’,@name) • Select @name seagatejogja@ugm.ac.id
Query data dgn Select Into <select into statement> ::= <select clause> <into clause> [ <from clause> [ <where clause> ] [ <group by clause> ] [ <having clause> ] [ <select block tail> ] ] <select block tail> ::= <order by clause> | <limit clause> | <order by clause> <limit clause> <into clause> ::= INTO <local variable> [ , <local variable> ]... seagatejogja@ugm.ac.id
create procedure kali_belanja (in cust_id varchar(5), out kali_belanja int) begin select count(cust_id) into kali_belanja from orders where customerid = cust_id; end seagatejogja@ugm.ac.id
Call kali_belanja(‘ANTON’,@A); • Select @A; seagatejogja@ugm.ac.id
Tugas • Tampilkan nama employee dengan id tertentu dan berapa kali mereka melayani customernya. • Tampilkan nama customer dengan id tertentu dan besarnya discount yang diperoleh. • Tampilkan nama customer dengan id tertentu dan berapa kali mereka bertransaksi. • Tampilkan nama barang dengan kode tertentu dan berapa kali ditransaksikan. • Tampilkan nama customer dengan id tertentu dan berapa besar nilai yang sudah mereka transaksikan. seagatejogja@ugm.ac.id
mysql> delimiter //mysql> create procedure empproc(in name char(12),in fathername char(12),in password char(12))-> begin-> insert into emp values(name,fathername,password);-> end;-> // seagatejogja@ugm.ac.id
mysql> delimiter // • mysql> CREATE PROCEDURE Proc(OUT p VARCHAR(20), OUT p1 VARCHAR(20),IN p2 INT) • -> BEGIN • -> INSERT INTO Emp VALUES(p2,'Suman','Pune','Web Designer',20000,965); • -> SELECT Ename,City INTO p,p1 FROM Emp WHERE Eid=p2; -> END -> // Query OK, 0 rows affected (0.01 sec) • mysql> delimiter ; • mysql> CALL Proc(@Name,@City,8); • Query OK, 0 rows affected (0.03 sec) • mysql> SELECT @Name,@City; seagatejogja@ugm.ac.id
mysql> CREATE FUNCTION func(str CHAR(20)) • -> RETURNS CHAR(50) • -> RETURN CONCAT('WELCOME TO, ',str,'!'); • Query OK, 0 rows affected (0.00 sec) • mysql> SELECT func('RoseIndia'); seagatejogja@ugm.ac.id