Selasa, 30 Maret 2021

Trigger (SQL)

Trigger

Trigger adalah objek di dalam database yang berasosiasi dengan suatu tabel, trigger akan aktif ketika tabel tersebut dikenai event (kejadian yang menimpa tabel, bisa berupa penambahan, perubahan, maupun penghapusan data) tertentu.

Konsep Trigger

Perintah T-SQL hanya dieksekusi ketika dibutuhkan, sama seperti Store Procedures tapi bagaimana jika kamu menginginkan sebuah perintah yang dieksekusi secara otomatis ketika kita mengeksekusi perintah lain atau melakukan aksi lain. Contohnya :
  • Jika sebuah baris dihapus, maka baris itu secara otomatis akan disimpan sebagai arsip;
  • Jika sebuah produk dipesan, maka stok produk itu berkurang sesuai dengan jumlah pesanan.

Latihan :

Buat Tabel log_products

Berikut ini query untuk membuat Tabel log_products:
CREATE TABLE log_products(
prod_id CHAR(5) NOT NULL,
status_prod VARCHAR(10) NOT NULL,
status_date DATETIME DEFAULT GETDATE());


Tambahkan Kolom Stock

Pada database sample_pbd, Tabel Products belum memiliki kolom Stock. Oleh sebab itu, kita perlu menambahkan kolom Stock terlebih dahulu. Berikut ini query untuk menambahkan kolom Stock:
ALTER TABLE products ADD Stock INT;


Latihan Soal : 

Soal 3:

Buatlah sebuah trigger dengan nama simpan_orderitems, trigger aktif setelah menyimpan data pada Tabel Orderitems. Action => merubah stock pada Tabel Products (stok berkurang).

Jawaban:

CREATE TRIGGER simpan_orderitems
ON orderitems
AFTER INSERT
AS
BEGIN
DECLARE @id CHAR(5), @Qty INT
SELECT @id = prod_id, @Qty = quantity
FROM inserted

UPDATE products SET Stock = Stock - @Qty
WHERE prod_id = @id;
END;


Pengujian:

INSERT INTO orderitems VALUES
('O0002','P0004',3);




Soal 4:

Buatlah sebuah trigger dengan nama hapus_orderitems, trigger aktif setelah menghapus data pada Tabel Orderitems. Action => mengubah stock pada Tabel Product (stock bertambah)

Jawaban:

CREATE TRIGGER hapus_orderitems
ON orderitems
AFTER DELETE
AS
BEGIN
DECLARE @id CHAR(5), @Qty INT
SELECT @id = prod_id, @Qty = quantity
FROM deleted

UPDATE products SET Stock = Stock + @Qty
WHERE prod_id = @id;
END;


Pengujian:

DELETE FROM orderitems WHERE order_num = 'O0002';


SELECT * FROM products


0 komentar:

Posting Komentar