Hallo para senior Oracle.
Saya baru belajar Oracle dapat kesulitan, mudahan2 para senior oracle ada yang
bisa memberikan penyegaran........
aku mau membuat trigger dari contoh di bawah ini.
1. untuk create table sih gak ada masalah, semuanya "table created",
2. setelah nyoba create dua trigger, ke dua duanya keluar pesan "ORA-01031:
insufficient privilages".
kenapa yah.... apa memang ada yang salah dari dua sintak trigger tersebut.
3. dalam penulisannya apa memang harus di ikutkan kata2 replace untuk create
(baru).
4. sintak2 seperti ini apa bisa di simpan (dalam satu file/tempat) dan sewaktu2
bisa di panggil untuk modifikasi,
Sekian dari saya atas kebaikan hati para senior Oracle untuk memberikan
tanggapan dan pencerahannya saya ucapkan terima kasih.
NB.
Berikut adalah sintak yang saya coba
1. Buat tabel dan mendefinisikan constraint
SQL> CREATE TABLE MASTER_BARANG
2 (KODE_BRG NUMBER(4) PRIMARY KEY,
3 NAMA_BRG VARCHAR2(20) NOT NULL,
4 HARGA NUMBER(10),
5 STOCK NUMBER(4));
Table created.
SQL> CREATE TABLE ORD
2 (NO_ORDER NUMBER(4) PRIMARY KEY,
3 ID_SUPPLIER NUMBER(4) NOT NULL,
4 TGL_ORDER DATE,
5 RP_TOTAL NUMBER(12));
Table created.
SQL> CREATE TABLE ORDER_DETAIL
2 (NO_ORDER NUMBER(4) REFERENCES ORD(NO_ORDER),
3 NO_URUT NUMBER(3),
4 KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG),
5 HARGA NUMBER(10),
6 QTY NUMBER(4),
7 SUBTOTAL NUMBER(10));
Table created.
SQL> CREATE TABLE SALES
2 (NO_SALES NUMBER(4) PRIMARY KEY,
3 ID_CUST NUMBER(4) NOT NULL,
4 TGL_SALES DATE,
5 RP_TOTAL NUMBER(12));
Table created.
SQL> CREATE TABLE SALES_DETAIL
2 (NO_SALES NUMBER(4) REFERENCES SALES(NO_SALES),
3 NO_URUT NUMBER(3),
4 KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG),
5 HARGA NUMBER(10),
6 QTY NUMBER(4),
7 SUBTOTAL NUMBER(10));
Table created.
2. Membuat Trigger Database
SQL> CREATE OR REPLACE TRIGGER update_STOCK_brg_ord
2 BEFORE INSERT OR UPDATE OF QTY ON order_detail
3 FOR EACH ROW
4 BEGIN
5 IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN
6 UPDATE MASTER_BARANG
7 SET STOCK = STOCK + (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))
8 WHERE KODE_BRG = :NEW.KODE_BRG;
9 ELSE
10 UPDATE MASTER_BARANG
11 SET STOCK = STOCK - (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0))
12 WHERE KODE_BRG = :NEW.KODE_BRG;
13 END IF;
14 END;
15 /
ORA-01031: insufficient privilages
SQL> CREATE OR REPLACE TRIGGER update_STOCK_brg_sales
2 BEFORE INSERT OR UPDATE OF QTY ON sales_detail
3 FOR EACH ROW
4 BEGIN
5 IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN
6 UPDATE MASTER_BARANG
7 SET STOCK = STOCK - (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))
8 WHERE KODE_BRG = :NEW.KODE_BRG;
9 ELSE
10 UPDATE MASTER_BARANG
11 SET STOCK = STOCK + (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0))
12 WHERE KODE_BRG = :NEW.KODE_BRG;
13 END IF;
4 END;
15 /
ORA-01031: insufficient privilages
[Non-text portions of this message have been removed]