Вы находитесь на странице: 1из 1

PBD – LOOPING PBD: MYSQL - PROCEDURE & FUNCTION

---------------------------------------------------------- ---------------------------------
DELIMITER // DELIMITER //
CREATE PROCEDURE test_loop() CREATE FUNCTION gema(kata CHAR(30), jumlah INT)
BEGIN RETURNS CHAR(250)
DECLARE pencacah INT; BEGIN
SET pencacah = 0; RETURN REPEAT(kata, jumlah);
SELECT CONCAT('Nilai awal pencacah : ', pencacah); END //
ulang: LOOP ---------------------------------
SET pencacah = pencacah + 1; SELECT gema('STT-PLN,',10);
IF pencacah > 10 THEN
LEAVE ulang; SHOW FUNCTION STATUS;
END IF; ---------------------------------
END LOOP ulang; DROP FUNCTION gema;
---------------------------------
SELECT CONCAT('Nilai akhir pencacah : ', pencacah); create table bagian
END // (kode_bagian varchar(5)primary key, nama_bagian varchar(20));
DELIMITER ; ---------------------------------
CALL test_loop(); insert into bagian values
---------------------------------------------------------- ('BG01', 'BAAK'),('BG02', 'PPSI'),('BG03', 'SPMA');
DELIMITER // ---------------------------------
CREATE PROCEDURE test_repeat()
BEGIN DELIMITER //
DECLARE pencacah INT DEFAULT 0; CREATE FUNCTION JmlBagian()
SELECT CONCAT('Nilai awal pencacah : ', pencacah); RETURNS INT BEGIN
REPEAT DECLARE jumlah INT;
SET pencacah = pencacah + 1; SELECT COUNT(*) INTO jumlah FROM bagian;
UNTIL pencacah > 10 END REPEAT; RETURN jumlah;
SELECT CONCAT('Nilai akhir pencacah :', pencacah); END //
END // ---------------------------------
DELIMITER ; CALL test_repeat();
---------------------------------------------------------- DELIMITER //
DELIMITER // CREATE PROCEDURE test_if(x INT, y INT)
CREATE PROCEDURE test_while() BEGIN
BEGIN IF x < y THEN
DECLARE pencacah INT; SELECT CONCAT('Terkecil: ', x);
SET pencacah = 0; ELSE
SELECT CONCAT('Nilai awal pencacah :', pencacah); SELECT CONCAT('Terkecil: ', y);
WHILE pencacah < 11 DO END IF;
SET pencacah = pencacah + 1; END //
END WHILE; ---------------------------------
SELECT CONCAT('Nilai akhir pencacah :', pencacah); CALL test_if(60,80);
END // ---------------------------------
DELIMITER ; CALL test_while();
---------------------------------------------------------- DELIMITER //
DELIMITER // CREATE PROCEDURE test_case(nilai INT)
CREATE PROCEDURE test_iterate() BEGIN
BEGIN DECLARE skor CHAR(50);
DECLARE pencacah INT DEFAULT 0;
DECLARE hasil CHAR(50); CASE
WHEN nilai > 100 OR nilai < 0 Then
SET hasil ='0'; SET skor = 'Nilai Salah';
ulang: WHILE pencacah < 11 DO WHEN nilai >=90 THEN
SET pencacah = pencacah + 1; SET skor = 'Skor: A';
IF pencacah > 3 AND pencacah < 7 THEN WHEN nilai >=70 THEN
ITERATE ulang; SET skor = 'Skor: B';
END IF; WHEN nilai >=60 THEN
SELECT CONCAT(hasil,'-',pencacah) SET skor = 'Skor: C';
INTO hasil; WHEN nilai >=50 THEN
END WHILE; SET skor = 'Skor: D';
SELECT hasil; ELSE
END // SET skor = 'Skor: E';
DELIMITER ; CALL test_iterate(); END CASE;
---------------------------------------------------------- SELECT skor;
DELIMITER // END;
CREATE TRIGGER rekam_pekerjaan ---------------------------------
AFTER INSERT ON infoprib CALL test_case(53);
FOR EACH ROW
BEGIN
INSERT INTO pekerjaan
VALUE(NEW.nip, '1',0);
END; //
DELIMITER ;

INSERT INTO infoprib VALUES


('PGW001','Faeyza Azka Rifai','Bandung','2012-05-30','L');

DELIMITER //
CREATE TRIGGER ubah_pekerjaan
BEFORE UPDATE on pekerjaan
FOR EACH ROW
BEGIN
IF NEW.nip <> OLD.nip THEN
SET NEW.nip = OLD.nip;
END IF;
END; //
DELIMITER ;

UPDATE pekerjaan SET kode_bag ='2', gaji = 1000000 WHERE nip = 'PGW001';

UPDATE pekerjaan SET nip='PGW012', gaji = 2000000 WHERE nip = 'PGW001';


--------------------------------------------------------------------
CREATE TABLE transaksi
(no_trans INT NOT NULL AUTO_INCREMENT PRIMARY KEY, tanggal DATE, nilai INT);

CREATE TABLE akumulasi


(tanggal DATE NOT NULL PRIMARY KEY, nilai INT);

DELIMITER //
CREATE TRIGGER rekam_total AFTER INSERT ON transaksi
FOR EACH ROW
BEGIN
DECLARE jum_baris INT;
SELECT COUNT(*) INTO jum_baris FROM akumulasi
WHERE tanggal = NEW.tanggal;
IF jum_baris = 0 THEN
INSERT INTO akumulasi VALUES(NEW.tanggal,NEW.nilai);
ELSE
UPDATE akumulasi
SET nilai = nilai + NEW.nilai WHERE tanggal = NEW.tanggal;
END IF;
END; //
DELIMITER ;

INSERT INTO transaksi


(tanggal, nilai) VALUES('2017-06-05',100000),('2017-06-07',200000);

INSERT INTO transaksi


(tanggal, nilai) VALUES('2017-06-05',50000);

SELECT * FROM transaksi; SELECT * FROM akumulasi;

Вам также может понравиться