Advertisement
0xCor3

PLSQL P11

Nov 11th, 2020 (edited)
1,010
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.54 KB | None | 0 0
  1. SET SERVEROUTPUT ON;
  2. SET ECHO ON;
  3. /* buat tabel STOK */
  4. CREATE TABLE STOK (
  5.     KODE CHAR(4) NOT NULL PRIMARY KEY,
  6.     NAMA_BARANG VARCHAR2(25),
  7.     JUMLAH_STOK NUMBER(10)
  8. );
  9. /* data-data dummy */
  10. INSERT INTO STOK VALUES ('0001', 'Televisi', 25);
  11. INSERT INTO STOK VALUES ('0002', 'Radio Transistor', 50);
  12. INSERT INTO STOK VALUES ('0003', 'Kipas Angin', 30);
  13. INSERT INTO STOK VALUES ('0004', 'Tape', 35);
  14. INSERT INTO STOK VALUES ('0005', 'AC', 15);
  15. /* Contoh 1 Membuat trigger untuk event BEFORE INSERT pada tabel STOK */
  16. CREATE OR REPLACE TRIGGER TR_BI_STOK
  17. BEFORE INSERT ON STOK
  18. FOR EACH ROW
  19. BEGIN
  20.     DBMS_OUTPUT.PUT_LINE ('Trigger BEFORE INSERT dilaksanakan');
  21. END;
  22. /
  23. /* Contoh 2 Membuat trigger untuk event AFTER UPDATE pada tabel STOK */
  24. CREATE OR REPLACE TRIGGER TR_AU_STOK
  25. AFTER UPDATE ON STOK
  26. FOR EACH ROW
  27. BEGIN
  28.     DBMS_OUTPUT.PUT_LINE ('Trigger AFTER UPDATE dilaksanakan');
  29. END;
  30. /
  31. /* Contoh 3 Membuat trigger untuk event AFTER DELETE pada tabel STOK */
  32. CREATE OR REPLACE TRIGGER TR_AD_STOK
  33. AFTER DELETE ON STOK
  34. FOR EACH ROW
  35. BEGIN
  36.     DBMS_OUTPUT.PUT_LINE ('Trigger AFTER DELETE dilaksanakan');
  37. END;
  38. /
  39. /* Contoh 1 Mengecek jalannya trigger TR_BI_STOK */
  40. INSERT INTO STOK VALUES ('0006', 'Lemari Es', 20);
  41. /* Contoh 2 Melakukan pengecekan terhadap trigger TR_AU_STOK */
  42. UPDATE STOK
  43.     SET JUMLAH_STOK = 10
  44.         WHERE KODE = '0006';
  45. /* Contoh 3 Melakukan pengecekan terhadap trigger TR_AD_STOK */
  46. DELETE FROM STOK WHERE KODE = '0006';
  47. /* Create Table PEMBELIAN dan PENJUALAN */
  48. CREATE TABLE PEMBELIAN (
  49.     KD_PEMBELIAN CHAR(6) NOT NULL,
  50.     KODE_BARANG CHAR(4),
  51.     JUMLAH_PEMBELIAN NUMBER(5),
  52.     CONSTRAINT PK_PEMBELIAN PRIMARY KEY (KD_PEMBELIAN),
  53.     CONSTRAINT FK_PEMBELIAN_STOK FOREIGN KEY (KODE_BARANG)
  54.         REFERENCES STOK (KODE)
  55. );
  56. CREATE TABLE PENJUALAN (
  57.     KD_PENJUALAN CHAR(6) NOT NULL,
  58.     KODE_BARANG CHAR(4),
  59.     JUMLAH_PENJUALAN NUMBER(5),
  60.     CONSTRAINT PK_PENJUALAN PRIMARY KEY (KD_PENJUALAN),
  61.     CONSTRAINT FK_PENJUALAN_STOK FOREIGN KEY (KODE_BARANG)
  62.         REFERENCES STOK (KODE)
  63. );
  64. /* Membuat trigger untuk menambah JUMLAH_STOK pada tabel STOK */
  65. CREATE OR REPLACE TRIGGER TR_AI_PEMBELIAN
  66. AFTER INSERT ON PEMBELIAN
  67. FOR EACH ROW
  68. DECLARE
  69.     X NUMBER;
  70. BEGIN
  71.     X := :NEW.JUMLAH_PEMBELIAN;
  72.     UPDATE STOK
  73.         SET JUMLAH_STOK = JUMLAH_STOK + X
  74.             WHERE KODE = :NEW.KODE_BARANG;
  75. END;
  76. /
  77. /* Cek kebenaran trigger */
  78. SELECT * FROM STOK;
  79. INSERT INTO PEMBELIAN VALUES ('BE-001', '0005', 10);
  80. SELECT * FROM STOK;
  81. /* Membuat trigger untuk mengurangi JUMLAH_STOK pada tabel STOK */
  82. CREATE OR REPLACE TRIGGER TR_AI_PENJUALAN
  83. AFTER INSERT ON PENJUALAN
  84. FOR EACH ROW
  85. DECLARE
  86.     X NUMBER;
  87. BEGIN
  88.     X := :NEW.JUMLAH_PENJUALAN;
  89.     UPDATE STOK
  90.         SET JUMLAH_STOK = JUMLAH_STOK - X
  91.             WHERE KODE = :NEW.KODE_BARANG;
  92. END;
  93. /
  94. /* Cek kebenaran trigger */
  95. SELECT * FROM STOK;
  96. INSERT INTO PENJUALAN VALUES ('JU-001', '0005', 7);
  97. SELECT * FROM STOK;
  98. /* Cascading delete dengan trigger */
  99. CREATE TABLE PELANGGAN (
  100.     NO_PELANGGAN NUMBER(10),
  101.     NAMA VARCHAR2(25),
  102.     ALAMAT VARCHAR2(30),
  103.     KOTA VARCHAR2(15)
  104. );
  105. CREATE TABLE ORDERS (
  106.     NO_ORDER NUMBER(10),
  107.     NO_PELANGGAN NUMBER(10),
  108.     JUMLAH_ORDER NUMBER(5)
  109. );
  110. INSERT INTO PELANGGAN VALUES (100, 'Ashanty', 'Meruya', 'Bandung');
  111. INSERT INTO PELANGGAN VALUES (101, 'Bunda', 'Joglo', 'Jakarta');
  112. INSERT INTO ORDERS VALUES (89012, 101, 20);
  113.  
  114. CREATE OR REPLACE TRIGGER TR_BD_PELANGGAN
  115. BEFORE DELETE ON PELANGGAN
  116. FOR EACH ROW
  117. BEGIN
  118.     DELETE FROM ORDERS
  119.     WHERE NO_PELANGGAN = :OLD.NO_PELANGGAN;
  120. END;
  121. /
  122. DELETE FROM PELANGGAN WHERE NO_PELANGGAN = 101;
  123. /* Mengaktifkan dan Menon-aktifkan Trigger | Untuk Event AFTER INSERT */
  124. CREATE OR REPLACE TRIGGER TR_AI_PELANGGAN
  125. AFTER INSERT ON PELANGGAN
  126. FOR EACH ROW
  127. BEGIN
  128.     DBMS_OUTPUT.PUT_LINE ('Trigger AFTER INSERT dilaksanakan');
  129. END;
  130. /
  131. /* Mengaktifkan dan Menon-aktifkan Trigger | Untuk Event AFTER UPDATE */
  132. CREATE OR REPLACE TRIGGER TR_AU_PELANGGAN
  133. AFTER UPDATE ON PELANGGAN
  134. FOR EACH ROW
  135. BEGIN
  136.     DBMS_OUTPUT.PUT_LINE ('Trigger AFTER UPDATE dilaksanakan');
  137. END;
  138. /
  139. /* Sekarang kita akan menon-aktifkan TR_AI_PELANGGAN. */
  140. ALTER TRIGGER TR_AI_PELANGGAN DISABLE;
  141. /* Lakukan pengecekan dengan memasukkan sebuah baris baru ke tabel PELANGGAN. */
  142. INSERT INTO PELANGGAN VALUES (102, 'Andre Taulani', 'Iskandarsyah 6', 'Jakarta');
  143. /* aktifkan kembali trigger dengan cara. */
  144. ALTER TRIGGER TR_AI_PELANGGAN ENABLE;
  145. /* Lakukan pengecekan dengan memasukkan sebuah baris baru ke tabel PELANGGAN */
  146. INSERT INTO PELANGGAN VALUES(103, 'Titi Kamal', 'Lebak Bulus', 'Jakarta');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement