Advertisement
adr001

Untitled

Jul 5th, 2021
1,306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 6.15 KB | None | 0 0
  1. //trigger 1
  2. CREATE OR REPLACE FUNCTION transaksi_crt()
  3.   RETURNS TRIGGER
  4.   LANGUAGE PLPGSQL
  5.   AS
  6. $$
  7. BEGIN
  8.     IF NEW.checkout = TRUE THEN
  9.          INSERT INTO transaksi(id_method, id_shipment, id_account, tanggal_transaksi, status, total)
  10.          VALUES(1, 1, NEW.id_account, date(), 0, NEW.total_harga);
  11.     END IF;
  12.     RETURN NEW;
  13. END;
  14. $$
  15.  
  16. CREATE TRIGGER transaksi_crt AFTER UPDATE ON keranjang
  17. FOR EACH ROW EXECUTE PROCEDURE transaksi_crt();
  18.  
  19. //trigger2
  20. CREATE OR REPLACE FUNCTION transaksi_stok()
  21.   RETURNS TRIGGER
  22.   LANGUAGE PLPGSQL
  23.   AS
  24. $$
  25. BEGIN
  26.     IF NEW.checkout = TRUE THEN
  27.         Update produk
  28.         SET stok_barang = stok_barang - 1
  29.         FROM produk p
  30.         WHERE p.id_barang in(SELECT id_barang from berisikan b WHERE b.id_cart = NEW.id_cart);
  31.     END IF;
  32.     RETURN NEW;
  33. END;
  34. $$
  35.  
  36. CREATE TRIGGER transaksi_stok AFTER UPDATE ON keranjang
  37. FOR EACH ROW EXECUTE PROCEDURE transaksi_stok();
  38.  
  39. //trigger3
  40. CREATE OR REPLACE FUNCTION keranjang_harga()
  41.   RETURNS TRIGGER
  42.   LANGUAGE PLPGSQL
  43.   AS
  44. $$
  45. DECLARE price float := (Select harga from produk p WHERE New.id_barang = p.id_barang);
  46. BEGIN
  47.     Update keranjang k
  48.     SET total_harga = total_harga + price
  49.     WHERE New.id_cart = k.id_cart;
  50.     RETURN NEW;
  51. END;
  52. $$
  53.  
  54. CREATE TRIGGER keranjang_harga AFTER INSERT ON berisikan
  55. FOR EACH ROW EXECUTE PROCEDURE keranjang_harga();
  56.  
  57. //trigger4
  58. CREATE OR REPLACE FUNCTION transaksi_promo()
  59.   RETURNS TRIGGER
  60.   LANGUAGE PLPGSQL
  61.   AS
  62. $$
  63. BEGIN
  64.     if OLD.id_transaksi <> NULL AND NEW.id_transaksi <> NULL  then
  65.     Update transaction t
  66.     SET total = total - NEW.diskon
  67.     WHERE t.id_transaksi = NEW.id_transaksi;
  68.     end if;
  69.     RETURN NEW;
  70. END;
  71. $$
  72.  
  73. CREATE TRIGGER transaksi_promo BEFORE UPDATE of id_transaksi ON promo
  74. FOR EACH ROW EXECUTE PROCEDURE transaksi_promo();
  75.  
  76.  
  77. //trigger5
  78. CREATE OR REPLACE FUNCTION transaksi_shipment()
  79.   RETURNS TRIGGER
  80.   LANGUAGE PLPGSQL
  81.   AS
  82. $$
  83. DECLARE tarif_old float := (Select tarif from shipment_method s WHERE OLD.id_shipment = p.id_shipment);
  84. DECLARE tarif_new float := (Select tarif from shipment_method s WHERE NEW.id_shipment = p.id_shipment);
  85. BEGIN
  86.     if NEW.id_shipment <> NULL AND OLD.id_shipment <> NULL then
  87.     Update transaction t
  88.     SET total = total - tarif_old + tarif_new
  89.     WHERE t.id_transaksi = NEW.id_transaksi;
  90.     end if;
  91.     RETURN NEW;
  92. END;
  93. $$
  94.  
  95. CREATE TRIGGER transaksi_shipment BEFORE UPDATE of id_shipment ON transaction
  96. FOR EACH ROW EXECUTE PROCEDURE transaksi_shipment();
  97.  
  98.  
  99. //trigger6
  100. CREATE OR REPLACE FUNCTION transaksi_bonus()
  101.   RETURNS TRIGGER
  102.   LANGUAGE PLPGSQL
  103.   AS
  104. $$
  105. DECLARE total float := (Select sum(harga) from transaksi t WHERE New.id_account = t.id_account);
  106. DECLARE id_promo int := (SELECT max(id_promo) from promo);
  107. BEGIN
  108.     if total > 500000 then
  109.     INSERT INTO promo (tanggal_mulai, tanggal_akhir, diskon) values(now() , now()+7, 0.1*total);
  110.     INSERT INTO mengklaim (id_account, id_promo) values(NEW.id_account, id_promo);
  111.     end if;
  112.     RETURN NEW;
  113. END;
  114. $$
  115.  
  116. CREATE TRIGGER transaksi_bonus AFTER INSERT OR UPDATE ON transaction
  117. FOR EACH ROW EXECUTE PROCEDURE transaksi_bonus();
  118.  
  119.  
  120. //trigger7
  121. CREATE OR REPLACE FUNCTION shop_star()
  122.   RETURNS TRIGGER
  123.   LANGUAGE PLPGSQL
  124.   AS
  125. $$
  126. DECLARE tmp_toko int := (
  127.     SELECT id_toko FROM shop_account s, produk pr
  128.     WHERE NEW.id_barang = pr.id_barang AND pr.id_toko = s.id_toko
  129. );
  130.  
  131. DECLARE total_barang int := (
  132.     Select count(me.id_barang) from menampung me
  133.     WHERE me.id_barang in(SELECT id_barang from produk pro WHERE pro.id_toko = tmp_toko)
  134. );
  135.  
  136. DECLARE rating_produk float := (
  137.     SELECT average(bintang) FROM review r
  138.     WHERE r.id_barang in (SELECT id_barang from produk pro WHERE pro.id_toko = tmp_toko)
  139. );
  140.    
  141. BEGIN
  142.     if total_barang > 5 AND rating_produk > 4 then
  143.     UPDATE shop_account
  144.     SET star = 1
  145.     WHERE shop_account.id_toko = tmp_toko;
  146.     end if;
  147.     RETURN NEW;
  148. END;
  149. $$
  150.  
  151. CREATE TRIGGER shop_star AFTER INSERT ON menampung
  152. FOR EACH ROW EXECUTE PROCEDURE shop_star();
  153.  
  154.  
  155. //query 1
  156. SELECT * from transaction t
  157. JOIN account ac on (t.id_account = ac.id_account)
  158. WHERE t.id_account in(
  159.     SELECT id_account FROM account WHERE nama_account = 'aldo'
  160. );
  161.  
  162.  
  163. //query 2
  164. SELECT pr.id_barang, nama_barang, AVG(bintang) AS rata2
  165. FROM((SELECT id_barang, bintang FROM review) as r
  166.         JOIN (SELECT id_barang, nama_barang FROM produk) as pr ON (r.id_barang = pr.id_barang) )
  167. GROUP BY pr.id_barang, pr.nama_barang
  168. HAVING AVG(bintang) > 4;
  169.  
  170.  
  171. //query 3
  172. SELECT pr.id_barang, pr.nama_barang FROM ((SELECT id_barang, nama_barang, id_toko FROM produk) as pr
  173.         JOIN (SELECT id_toko, nama_toko FROM shop_account) as s ON (pr.id_toko = s.id_toko))
  174. WHERE s.nama_toko = 'sanjaya store';
  175.  
  176.  
  177. //query 4
  178. SELECT ac.id_account, ac.nama_account FROM ((SELECT id_account, nama_account FROM account) as ac
  179.         JOIN (SELECT id_account, id_method FROM transaction) as tr ON (tr.id_account = ac.id_account)
  180.                 JOIN (SELECT id_method, nama_pembayaran FROM payment_method) as pa ON (tr.id_method = pa.id_method))
  181. WHERE pa.nama_pembayaran = 'ovo';
  182.  
  183.  
  184. //query 5
  185. SELECT ac.id_account, ac.nama_account, SUM(total) AS totalharga FROM ((SELECT id_account, nama_account FROM account) as ac
  186.         JOIN (SELECT id_account, total FROM transaction) as tr ON (tr.id_account = ac.id_account))
  187. GROUP BY ac.id_account, ac.nama_account
  188. HAVING SUM(total) > 500000;
  189.  
  190.  
  191. indexing
  192. CREATE INDEX index_id_account
  193. ON account(id_account);
  194.  
  195. CREATE INDEX index_id_transaction
  196. ON transaction(id_transaksi);
  197.  
  198. CREATE INDEX index_id_barang
  199. ON produk(id_barang);
  200.  
  201. CREATE INDEX index_id_toko
  202. ON shop_account(id_toko);
  203.  
  204. --testing trigger 3
  205. SELECT * FROM keranjang;
  206.  
  207. --testing trigger 1
  208. UPDATE keranjang
  209. set checkout = true
  210. where id_cart = 1;
  211. SELECT * FROM transaction;
  212.  
  213. --testing trigger 2
  214. SELECT * FROM produk;
  215.  
  216. --testing trigger 6
  217. INSERT INTO berisikan values(1,3);
  218. SELECT * FROM promo;
  219. SELECT * FROM mengklaim;
  220.  
  221. --testing trigger 4
  222. update promo
  223. set id_transaksi = null
  224. where id_promo = 3;
  225.  
  226. SELECT * FROM promo;
  227.  
  228. update promo
  229. set id_transaksi = 6
  230. where id_promo = 3;
  231. SELECT * FROM transaction;
  232.  
  233. --testing trigger 5
  234. update transaction
  235. set id_shipment = 2
  236. where id_transaksi = 11;
  237.  
  238. SELECT * FROM transaction;
  239.  
  240. --testing trigger 6
  241. INSERT INTO menampung values(6, 1);
  242. INSERT INTO menampung values(6, 3);
  243.  
  244. SELECT * from shop_account;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement