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.
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);