Anda di halaman 1dari 10

1.

Syntax transaction diluar stored procedure

START TRANSACTION;
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Sonic the Hedgehog', 50000, 45);
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Bird of Prey', 60000, 35);
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Mulan', 25000, 20);
COMMIT;
Penjelasan : terjadi penambahan film baru karena alur proses berhasil tanpa ada error.Sehingga,
semua proses input disimpan ke dalam database tersebut.

2. Salah satu query error dan ditutup dengan rollback


START TRANSACTION;
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Sonic the Hedgehog', 50000, 45);
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Bird of Prey', 60000, 35);
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Mulan3', 25000, 'hbs_terjual');
ROLLBACK;
Penjelasan : tidak terjadi penambahan karena terdapat kasus ada kegagalan
(kesalahan/error) di salah satu proses itu. Maka, semua proses input akan dibatalkan
(rollback) dan tidak akan disimpan ke dalam database tersebut.
3. Transaction yang sudah dibuat pada soal nomor 1 dan 2 pada procedure berbeda, dan
amati hasilnya.
MYSQL
Nomor 1
 (Transaction procedure dalam kondisi benar):
DELIMITER $
CREATE PROCEDURE TambahFilm(IN in_harga INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
ROLLBACK;
START TRANSACTION;
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Black Widow', in_harga, 50);
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Wonder Woman 2', in_harga, 50);

SELECT * FROM film;


COMMIT;
END
$ DELIMITER ;

# Sebelum terjadi penambahan film:

#Sesudah terjadi penambahan film dan pemanggilan stored procedure


Penjelasan : Terjadi penambahan 2 data baru yang dikarenakan query diisi dengan
benar tanpa error sehingga hasilnya dapat ditampilkan dengan menggunakan
COMMIT tanpa menggunakan ROLLBACK.

 (SAVEPOINT procedure dalam kondisi benar):


DELIMITER $

CREATE PROCEDURE TransTambahFilm(IN in_harga INT) BEGIN


DECLARE errorCode CHAR(5) DEFAULT '00000';

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING


BEGIN
GET DIAGNOSTICS CONDITION 1

errorCode = RETURNED_SQLSTATE;
END;

START TRANSACTION; SAVEPOINT satu;

INSERT INTO film (nama_produk, harga, jumlah_kursi)


VALUES('Black Widow 2', in_harga, 30);

IF errorCode != '00000' THEN ROLLBACK TO satu;


END IF;
SAVEPOINT dua;
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Wonder Women 3', in_harga, 25);

IF errorCode != '00000' THEN ROLLBACK TO dua;


END IF;

SELECT * FROM film;


COMMIT;
END
$ DELIMITER ;

#Hasil dieksekusi dan pemanggilan stored procedure

Penjelasan : Pada kasus ini terjadi penambahan 2 data nama_film baru dengan
kondisi tanpa error sehingga SAVEPOINT satu dan SAVEPOINT dua berjalan
dengan baik serta COMMIT berjalan mulus tanpa adanya kejadian ROLLBACK
Nomor 2:
 (Transaction pocedure dalam kondisi error):
DELIMITER $
CREATE OR REPLACE PROCEDURE TambahFilm(IN in_harga INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
ROLLBACK;
START TRANSACTION;
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Black Widow pt.2', 'tdk_diketahui', 50);
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Wonder Woman pt.3', in_harga, 25);

SELECT * FROM film;


COMMIT;
END
$ DELIMITER ;
Penjelasan:Tidak ada hasil penambahan film di karenakan ada kesalahan pada saat
penginputan data.

(seharusnya diisi dalam


bentuk type data INT).

 (SAVEPOINT procedure dalam kondisi error):


DELIMITER $

CREATE OR REPLACE PROCEDURE TransTambahFilm(IN in_harga INT)


BEGIN
DECLARE errorCode CHAR(5) DEFAULT '00000';

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING


BEGIN
GET DIAGNOSTICS CONDITION 1

errorCode = RETURNED_SQLSTATE;
END;

START TRANSACTION; SAVEPOINT satu;

INSERT INTO film (nama_produk, harga, jumlah_kursi)


VALUES('Mulan 2', in_harga, 35);

IF errorCode != '00000' THEN ROLLBACK TO satu;


END IF;

SAVEPOINT dua;
INSERT INTO film (nama_film, harga, jumlah_kursi)
VALUES('Onward 2', in_harga, 'kursi_hbs');

IF errorCode != '00000' THEN ROLLBACK TO dua;


END IF;

SELECT * FROM film;


COMMIT;
END
$ DELIMITER ;

#Hasil diseksekusi dan pemanggilan stored procedure:

Penjelasan : terjadi penambahan data nama_film ‘Onward 2’dengan kondisi error


karena salah memasukkan type data(‘kursi_hbs’(VARCHAR(255)) di kolom
jumlah_kursi (INT)) sehingga ROLLBACK dalam SAVEPOINT dua berfungsi dan
dilanjutkan dengan penambahan data nama_film berikutnya yaitu ‘Mulan 2’ yang
dilakukan COMMIT.
ORACLE

Anda mungkin juga menyukai