Dokumen tersebut memberikan contoh-contoh penggunaan trigger pada PostgreSQL beserta penjelasan mengenai komponen-komponennya. Di antaranya adalah cara pembuatan trigger, variabel khusus trigger seperti NEW dan OLD, serta contoh-contoh kasus penggunaan trigger untuk melakukan validasi data, auditing perubahan data, dan penyimpanan log aktivitas.
Dokumen tersebut membahas tentang list berkait ganda (doubly linked list) dan operasi-operasinya seperti penambahan, penghapusan, dan pencarian elemen pada list tersebut. Terdapat penjelasan mengenai konsep dasar doubly linked list, deklarasi struktur data, dan fungsi-fungsi untuk melakukan operasi penambahan di depan, belakang, dan tengah list, serta penghapusan di depan, belakang, dan tengah list. Juga dibahas tentang
The document provides information about various SQL concepts like views, triggers, functions, indexes, and joins. It defines views as virtual tables created by queries on other tables. Triggers are blocks of code that execute due to data modification language statements on tables. Functions allow reusable code and improve clarity. Indexes speed up searches by allowing fast data retrieval. Joins combine data from two or more tables based on relationships between columns. Stored procedures are SQL statements with an assigned name that are stored for shared use.
Perintah INSERT digunakan untuk memasukkan data ke dalam tabel database. Ada beberapa variasi perintah INSERT seperti INSERT INTO, INSERT SELECT, INSERT IGNORE, INSERT DELAYED, dan REPLACE INTO. Perintah-perintah tersebut memungkinkan penambahan data secara individu, menyalin data antar tabel, menghindari duplikasi, menangguhkan proses insert, mengatur prioritas, dan mengganti baris data.
Dokumen tersebut membahas tentang list berkait ganda (doubly linked list) dan operasi-operasinya seperti penambahan, penghapusan, dan pencarian elemen pada list tersebut. Terdapat penjelasan mengenai konsep dasar doubly linked list, deklarasi struktur data, dan fungsi-fungsi untuk melakukan operasi penambahan di depan, belakang, dan tengah list, serta penghapusan di depan, belakang, dan tengah list. Juga dibahas tentang
The document provides information about various SQL concepts like views, triggers, functions, indexes, and joins. It defines views as virtual tables created by queries on other tables. Triggers are blocks of code that execute due to data modification language statements on tables. Functions allow reusable code and improve clarity. Indexes speed up searches by allowing fast data retrieval. Joins combine data from two or more tables based on relationships between columns. Stored procedures are SQL statements with an assigned name that are stored for shared use.
Perintah INSERT digunakan untuk memasukkan data ke dalam tabel database. Ada beberapa variasi perintah INSERT seperti INSERT INTO, INSERT SELECT, INSERT IGNORE, INSERT DELAYED, dan REPLACE INTO. Perintah-perintah tersebut memungkinkan penambahan data secara individu, menyalin data antar tabel, menghindari duplikasi, menangguhkan proses insert, mengatur prioritas, dan mengganti baris data.
Makalah ini membahas tentang algoritma stack. Terdapat penjelasan mengenai pengertian stack, definisi stack, deklarasi stack, dan operasi-operasi dasar pada stack seperti inisialisasi, push, pop, size, empty, dan full. Contoh pemakaian stack untuk membalik kalimat juga dijelaskan.
Dokumen tersebut membahas tentang set instruksi (instruction set) yang merupakan kumpulan lengkap instruksi yang dapat dimengerti oleh CPU. Terdapat penjelasan mengenai jenis-jenis instruksi, operand, operasi, teknik pengalamatan, serta format set instruksi.
Dokumen tersebut membahas tentang linked list, yaitu struktur data yang terdiri dari kumpulan elemen yang saling terhubung melalui pointer. Terdapat beberapa jenis linked list seperti single linked list, double linked list, dan circular double linked list. Dokumen juga menjelaskan beberapa operasi yang dapat dilakukan pada linked list seperti insert, delete, dan retrieve.
Modul ini membahas tentang rangkaian digital dan logika kombinasi. Terdapat penjelasan tentang tabel kebenaran, gerbang logika dasar, bentuk persamaan logika, dan teknik minimisasi untuk menyederhanakan persamaan logika."
Laporan praktikum ini membahas tentang operasi input output pada sistem operasi Linux melalui beberapa percobaan seperti menampilkan proses aktif, membuat dan mengakses file, serta mengalihkan input dan output antar perintah melalui operator pipa.
Dokumen tersebut membahas tentang Karnaugh Map dan penggunaannya untuk menyederhanakan fungsi logika. Karnaugh Map adalah pemetaan yang menggunakan kotak-kotak untuk mewakili kombinasi variabel input dan digunakan untuk menyederhanakan fungsi logika menjadi bentuk produk sumbu atau sum of products."
Dokumen tersebut memberikan penjelasan mengenai class diagram dalam pemodelan sistem informasi. Class diagram digunakan untuk menggambarkan objek/kelas pada suatu sistem beserta atribut, operasi, dan hubungan antar kelas. Berbagai contoh class diagram juga disajikan untuk mengilustrasikan penggunaan class, atribut, hubungan, indikator hubungan, dan generalisasi/spesialisasi antar kelas.
Program ini terdiri dari dua bagian, yaitu bagian pertama untuk menampilkan form input dan bagian kedua untuk melakukan validasi terhadap data yang diinputkan ke dalam form tersebut."
Kode antara / Intermediate code merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi
Subquery digunakan untuk menyelesaikan masalah ketika terdapat nilai yang tidak diketahui. Subquery dengan banyak kolom membandingkan tiap baris query utama dengan nilai subquery berkolom dan baris ganda. Pembandingan kolom dalam subquery banyak kolom dapat berupa pembandingan berpasangan atau tidak berpasangan. Query dapat diletakkan di dalam klausa FROM untuk membentuk tabel sementara. Korelasi subquery digunakan untuk pemrosesan baris per
Dokumen tersebut membahas dua model neuron yaitu McCulloch-Pitts dan Hebb. McCulloch-Pitts adalah model neuron pertama yang dirancang tahun 1943, sedangkan model Hebb dirancang tahun 1949 oleh Donald Hebb. Kedua model dijelaskan arsitektur dan algoritmanya beserta contoh penerapan untuk mengenali pola logika AND dan OR.
RPC memungkinkan akses prosedur jarak jauh dengan server menyediakan layanan prosedur remote dan client menghubungi server melalui socket. RPC menggunakan paradigma pemrograman prosedural dan mudah digunakan tetapi kurang fleksibel terhadap perubahan.
Trigger adalah objek database yang dijalankan secara otomatis ketika terjadi perubahan data pada tabel tertentu. Trigger dapat digunakan untuk mengubah data sebelum proses INSERT, menyimpan data ke tabel lain sebelum diupdate atau dihapus, serta membatasi operasi DML berdasarkan kondisi tertentu.
Makalah ini membahas tentang algoritma stack. Terdapat penjelasan mengenai pengertian stack, definisi stack, deklarasi stack, dan operasi-operasi dasar pada stack seperti inisialisasi, push, pop, size, empty, dan full. Contoh pemakaian stack untuk membalik kalimat juga dijelaskan.
Dokumen tersebut membahas tentang set instruksi (instruction set) yang merupakan kumpulan lengkap instruksi yang dapat dimengerti oleh CPU. Terdapat penjelasan mengenai jenis-jenis instruksi, operand, operasi, teknik pengalamatan, serta format set instruksi.
Dokumen tersebut membahas tentang linked list, yaitu struktur data yang terdiri dari kumpulan elemen yang saling terhubung melalui pointer. Terdapat beberapa jenis linked list seperti single linked list, double linked list, dan circular double linked list. Dokumen juga menjelaskan beberapa operasi yang dapat dilakukan pada linked list seperti insert, delete, dan retrieve.
Modul ini membahas tentang rangkaian digital dan logika kombinasi. Terdapat penjelasan tentang tabel kebenaran, gerbang logika dasar, bentuk persamaan logika, dan teknik minimisasi untuk menyederhanakan persamaan logika."
Laporan praktikum ini membahas tentang operasi input output pada sistem operasi Linux melalui beberapa percobaan seperti menampilkan proses aktif, membuat dan mengakses file, serta mengalihkan input dan output antar perintah melalui operator pipa.
Dokumen tersebut membahas tentang Karnaugh Map dan penggunaannya untuk menyederhanakan fungsi logika. Karnaugh Map adalah pemetaan yang menggunakan kotak-kotak untuk mewakili kombinasi variabel input dan digunakan untuk menyederhanakan fungsi logika menjadi bentuk produk sumbu atau sum of products."
Dokumen tersebut memberikan penjelasan mengenai class diagram dalam pemodelan sistem informasi. Class diagram digunakan untuk menggambarkan objek/kelas pada suatu sistem beserta atribut, operasi, dan hubungan antar kelas. Berbagai contoh class diagram juga disajikan untuk mengilustrasikan penggunaan class, atribut, hubungan, indikator hubungan, dan generalisasi/spesialisasi antar kelas.
Program ini terdiri dari dua bagian, yaitu bagian pertama untuk menampilkan form input dan bagian kedua untuk melakukan validasi terhadap data yang diinputkan ke dalam form tersebut."
Kode antara / Intermediate code merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi
Subquery digunakan untuk menyelesaikan masalah ketika terdapat nilai yang tidak diketahui. Subquery dengan banyak kolom membandingkan tiap baris query utama dengan nilai subquery berkolom dan baris ganda. Pembandingan kolom dalam subquery banyak kolom dapat berupa pembandingan berpasangan atau tidak berpasangan. Query dapat diletakkan di dalam klausa FROM untuk membentuk tabel sementara. Korelasi subquery digunakan untuk pemrosesan baris per
Dokumen tersebut membahas dua model neuron yaitu McCulloch-Pitts dan Hebb. McCulloch-Pitts adalah model neuron pertama yang dirancang tahun 1943, sedangkan model Hebb dirancang tahun 1949 oleh Donald Hebb. Kedua model dijelaskan arsitektur dan algoritmanya beserta contoh penerapan untuk mengenali pola logika AND dan OR.
RPC memungkinkan akses prosedur jarak jauh dengan server menyediakan layanan prosedur remote dan client menghubungi server melalui socket. RPC menggunakan paradigma pemrograman prosedural dan mudah digunakan tetapi kurang fleksibel terhadap perubahan.
Trigger adalah objek database yang dijalankan secara otomatis ketika terjadi perubahan data pada tabel tertentu. Trigger dapat digunakan untuk mengubah data sebelum proses INSERT, menyimpan data ke tabel lain sebelum diupdate atau dihapus, serta membatasi operasi DML berdasarkan kondisi tertentu.
Dokumen tersebut berisi penjelasan tentang beberapa cara membuat fungsi SQL. Terdapat penjelasan tentang cara membuat fungsi untuk mengecek ketersediaan barang stok, menghitung rata-rata harga, melakukan validasi nomor rekening, dan mengambil tanggal-tanggal minggu dari rentang tanggal.
Trigger adalah sebuah objek database yang di asosiasikan dengan sebuah tabel dan akan aktif (terpicu/trigger) ketika sebuah event terjadi pada tabel tersebut
Tugas Pendahuluan Praktikum Data Mining Dan Warehousing Modul 5nada_salwa
Dokumen ini membahas tentang trigger, perbedaan function, procedure dan package, serta cara membuat dan mengisi tabel jenis sesuai ERD yang ditetapkan pada modul. Trigger akan dieksekusi sebelum insert dilakukan untuk menyalin data ke tabel lain, sedangkan function, procedure dan package memiliki perbedaan dalam pengembalian nilai dan penyimpanan perintah. Tabel jenis dibuat dan diisi dengan 10 kategori mata pelajaran.
Trigger adalah blok program SQL yang dijalankan secara otomatis saat terjadi perubahan data pada tabel tertentu akibat insert, update, atau delete record. Trigger digunakan untuk memelihara integritas data dan mencegah pelanggaran aturan-aturan yang berlaku pada basis data. Trigger dapat membuat riwayat perubahan secara otomatis dan menjaga keamanan sistem database.
Dokumen tersebut membahas tentang penggunaan trigger pada Oracle 10g untuk menjaga integritas dan konsistensi data pada suatu tabel, dengan menjelaskan konsep dasar trigger, contoh kasus penerapan trigger untuk mengupdate jumlah mahasiswa yang diwaliki seorang dosen, serta pembuktian penerapannya."
Stored Procedure dan Stored Function merupakan dua konsep penting dalam pengembangan database, terutama pada MySQL. Kedua fitur ini memberikan kemampuan untuk menyimpan serangkaian instruksi SQL secara terpusat di database, meningkatkan efisiensi, keamanan, dan memfasilitasi pemeliharaan kode. Berikut adalah deskripsi mendalam mengenai Stored Procedure dan Stored Function pada MySQL:
Stored Procedure:
Stored Procedure adalah sekumpulan perintah SQL yang telah disimpan dalam database untuk dieksekusi nanti. Proses ini dilakukan secara terpusat di server database, memberikan manfaat berikut:
Efisiensi Eksekusi:
Stored Procedure dapat dioptimalkan dan dikompilasi sekali, mengurangi overhead pengompilan setiap kali perintah dieksekusi.
Pemanggilan ulang Stored Procedure meminimalkan pengiriman data antara aplikasi dan server database.
Keamanan:
Mengontrol akses ke data dengan memberikan izin eksekusi Stored Procedure kepada pengguna tertentu.
Mencegah injeksi SQL karena parameter dapat diikat dengan aman.
Abstraksi Logika Bisnis:
Memungkinkan pemisahan logika bisnis dari aplikasi, sehingga perubahan dapat dilakukan di tingkat database tanpa merubah kode aplikasi.
Fasilitas pemeliharaan dan pengelolaan kode yang lebih baik.
Transaksi dan Rollback:
Membantu dalam manajemen transaksi dengan memungkinkan pengguna untuk memulai, menangguhkan, atau menggulung transaksi di dalam Stored Procedure.
Parameter dan Output:
Menerima parameter input dan mengembalikan nilai output, meningkatkan fleksibilitas dan reusable code.
Stored Function:
Stored Function adalah serangkaian perintah SQL yang mengembalikan nilai tunggal. Beberapa aspek penting dari Stored Function melibatkan:
Reusability:
Mirip dengan Stored Procedure, Stored Function dapat dipanggil dan digunakan berkali-kali dari berbagai bagian dalam database.
Return Value:
Memberikan nilai kembali yang dapat digunakan dalam pernyataan SQL SELECT atau sebagai bagian dari ekspresi dalam perintah SQL lainnya.
Keamanan dan Izin:
Memiliki kontrol akses yang serupa dengan Stored Procedure, memastikan pengguna hanya dapat menjalankan fungsi yang diizinkan.
Integrasi dengan Query:
Dapat digunakan dalam pernyataan SQL untuk mengolah data saat itu juga dan mengembalikan hasil.
Kemampuan Pengolahan Data:
Mungkin melakukan operasi pengolahan data yang kompleks dan mengembalikan hasil dengan sintaks yang bersih.
Perbandingan Antara Stored Procedure dan Stored Function:
Perbedaan Utama:
Stored Procedure tidak mengembalikan nilai, sedangkan Stored Function harus mengembalikan satu nilai.
Stored Function dapat digunakan dalam pernyataan SELECT, sedangkan Stored Procedure digunakan dengan pernyataan CALL.
Pilihan Penggunaan:
Gunakan Stored Procedure ketika Anda ingin melakukan operasi tanpa memerlukan hasil kembalian langsung.
Pilih Stored Function ketika Anda memerlukan nilai kembalian yang dapat digunakan dalam ekspresi atau pernyataan SQL lainnya.
Keamanan dan Kontrol Akses:
Baik Stored Procedure maupun S
Dokumen menjelaskan cara menguji kecepatan query SELECT pada tabel dengan jumlah record berbeda dengan menggunakan index pada kolom tertentu. Dilakukan pengukuran waktu eksekusi query berdasarkan ID dan NAME, baik sebelum dan sesudah dibuat index pada kolom NAME. Hasil pengukuran disimpan ke dalam tabel untuk dianalisis.
Statement of Accomplisment from Online Machine Learning ClassAmmar Shadiq
Muhammad Ammar Shadiq AD Darman successfully completed an online Machine Learning course from October to December 2011. He scored 80/80 on review questions and 800/800 on programming exercises, meeting the requirements to pass the course. The certificate confirms Muhammad completed the online coursework but does not represent a Stanford enrollment, grade, credit, degree, or verified identity.
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa IndonesiaAmmar Shadiq
Pengelompokan dokumen-dokumen berita kedalam topik-topik yang lebih spesifik membutuhkan waktu dan sumber daya manusia yang tidak sedikit. Untuk mengatasi permasalahan waktu dan sumber daya manusia tersebut, dibutuhkan pengelompokan dokumen-dokumen berita berdasarkan topik-topiknya secara otomatis, selain itu, untuk lebih memudahkan dalam menemukan informasi yang diinginkan, dibutuhkan juga pemberian deskripsi dari kelompok berita. Penelitian ini mencoba untuk mengatasi permasalahan tersebut dengan denjadikan pengelompokan topik-topik berita secara otomatis dengan algoritma Group-Average Hierarchical Aglomerative Clustering (GA-HAC) dan pemberian deskripsi secara otomatis dengan Mutual Information (MI). Eksperimen implementasi dari algoritma ini terhadap 509 dokumen berita menunjukkan bahwa
GA-HAC dapat mengelompokkan dokumen-dokumen berita yang memiliki topik yang sama dengan nilai akurasi precision 84,4% dan MI dapat memberikan nilai akurasi rata-rata partial match Match@N 70,81% untuk seluruh topik dan 90% untuk 10 topik terpopuler
Pengenalan konsep dan komponen Oracle database recoveryAmmar Shadiq
System komputer, seperti perangkat-perangkat lain, tidaklah luput dari kegagalan yang diakibatkan berbagai hal, seperti : disk crash, padam listrik, software error, kebakaran di ruang server, bahkan sabotase. Kegagalan system dapat mengakibatkan hilangnya data. Untuk itulah System Basis Data harus melaksanakan tindakan tertentu untuk menjamin sifat transaksi yang Atomik dan Bertahan (Durable). Bagian terintegrasi dari sebuah System Basis Data adalah recovery scheme (rencana pemulihan) yang dapat memulihkan Basis Data kepada keadaan konsisten sebelum kegagalan system.
Dokumen tersebut membahas tentang transaksi dan integritas data dalam basis data. Secara singkat, dokumen menjelaskan bahwa transaksi merupakan kumpulan operasi yang berjalan secara atomik (semua berhasil atau semua gagal), konsisten, terisolasi, dan bertahan (ACID properties). Dokumen juga mendemonstrasikan konsep transaksi menggunakan contoh transfer uang antar rekening bank.
Dokumen tersebut membahas tentang tipe data primitif dan kelas-kelas nomor yang tersedia dalam bahasa pemrograman Java. Terdapat delapan tipe data primitif yaitu byte, short, int, long, float, double, boolean, dan char. Dokumen tersebut juga membahas tentang literal, operator penugasan dan aritmetik, serta kelas-kelas Number yang dapat digunakan sebagai alternatif dari tipe data primitif.
Dokumen tersebut membahas tentang tipe data primitif dan tipe data objek pada bahasa pemrograman Java seperti integer, floating point, boolean, char, dan string beserta contoh penggunaannya. Juga dibahas operasi aritmatika dasar, operator unary, penggabungan string, dan konversi antara tipe data.
1. Trigger
M. Ammar Shadiq
Ilmu Komputer Universitas Pendidikan Indonesia, Bandung
5 Mei 2008
Catatan :
banyak perintah-perintah pada contoh-contoh berikut yang akan di bahas pada
pembahasan mengenai data integrity.
Pastikan anda telah menginisiasikan procedural language (bahasa prosedural) pada postgreSQL
yang dinamakan PL/pgsql
CREATE LANGUAGE plpgsql;
CREATE TRIGGER <nama_trigger>
[BEFORE | AFTER] [ INSERT | DELETE | UPDATE [OR ...]]
ON <nama_table> FOR EACH ROW
EXECUTE PROCEDURE <nama_fungsi> [(args)];
BEFORE
Sebelum mengeksekusi Query pada tabel <nama_table>, jalankan dulu fungsi.
AFTER
Setelah mengeksekusi Query pada tabel <nama_table>, lalu setelah itu jalankan fungsi.
INSERT
Untuk Query yang memasukkan data baru pada tabel <nama_table> jalankan trigger.
DELETE
Untuk Query yang menghapus data pada tabel <nama_table> jalankan trigger.
UPDATE
Untuk Query yang mengubah data pada <nama_table> jalankan trigger.
INSERT OR DELETE
Untuk Query yang memasukkan data baru atau menghapus data pada tabel <nama_table>
jalankan trigger.
INSERT OR DELETE OR UPDATE
Untuk Query yang memasukkan, menghapus atau mengubah data pada tabel <nama_table>
jalankan trigger.
Kemungkinan lainnya penggunaan OR adalah :
INSERT OR UPDATE
DELETE OR UPDATE
Fungsi yang dipanggil Trigger : sebuah fungsi yang di panggil trigger adalah sebuah fungsi yang tidak
memiliki argumen masukan dan argumen keluarannya memiliki tipe data spesial -- TRIGGER.
Fungsi yang di panggil trigger harus mengembalikan nilai NULL atau sebuah record/row yang
memiliki struktur yang sama persis dengan table dimana trigger tersebut ditempatkan.
2. Variabel-variabel spesial trigger PostgreSQL
NEW
Tipe data : RECORD
Variabel yang menyimpan record baru untuk operasi INSERT/UPDATE dalam trigger level-
baris(rowlevel).
OLD
Tipe data : RECORD
Variabel ini menyimpan record lama untuk operasi UPDATE/DELETE dalam trigger level-
baris(rowlevel).
TG_NAME
Tipe data : name
Variabel ini berisi nama trigger yang dijalankan.
TG_WHEN
Tipe data : text
Sebuah string baik dari BEFORE atau AFTER tergantung definisi trigger.
TG_OP
Tipe data : text
Sebuah string dari operasi INSERT,UPDATE atau DELETE yang memberitahu untuk operasi mana
trigger dijalankan. (digunakan pada Contoh 2)
TG_RELID
Tipe data : oid
Object ID dari tabel yang menyebabkan pengeksekusian trigger.
TG_TABLE_NAME
Tipe data : name
Nama tabel yang menyebabkan pengeksekusian trigger.
TG_TABLE_SCHEMA
Tipe data : name
Nama schema dari tabel yang menyebabkan pengeksekusian trigger.
TG_NARGS
Tipe data : integer
Jumlah argumen yang diberikan ke procedure trigger pada statement CREATE TRIGGER
TG_ARGV[]
Tipe data : array yang berisi text
Argumen dari statement CREATE TRIGGER. Index mulai dari 0. Pengaksesan dengan index yang
salah (kurang dari 0, lebih besar dari TG_NARGS atau sama dengan TG_NARGS) akan menghasilkan
nilai NULL.
3. Contoh 1
Contoh trigger berikut ini memastikan bahwa tiap kali sebuah baris pada tabel ditambahkan (insert)
atau dirubah (update), username dan waktunya pada saat itu dimasukkan kedalam baris. Trigger ini
juga bekerja untuk mengecek apakah nama pegawai diisikan dan gaji bernilai positif.
CREATE TABLE pegawai1
(
nama_peg text,
gaji_peg integer,
tgl_trkhr timestamp,
user_trkhr text
);
Pertama yang harus dilakukan adalah membuat fungsi yang menjelaskan apa yang dilakukan oleh
trigger tersebut.
CREATE FUNCTION cattn_peg() RETURNS trigger AS $cattn_peg$
BEGIN
-- Periksa nama_peg dan gaji_peg tidak kosong
IF NEW.nama_peg IS NULL THEN
RAISE EXCEPTION 'nama_peg tidak boleh kosong';
END IF;
IF NEW.gaji_peg IS NULL THEN
RAISE EXCEPTION '% gaji_peg tidak boleh kosong', NEW.nama_peg;
END IF;
-- siap yang bekerja untuk kita jika dia yang membayar?
IF NEW.gaji_peg < 0 THEN
RAISE EXCEPTION '% gaji_peg tidak boleh negatif', NEW.nama_peg;
END IF;
-- Tuliskan siap yang mengganti Upah saat itu beserta waktunya
NEW.tgl_trkhr := current_timestamp;
NEW.user_trkhr := current_user;
RETURN NEW;
END;
$cattn_peg$ LANGUAGE 'plpgsql';
Lalu membuat deklarasi trigger yang memanggil fungsi diatas.
CREATE TRIGGER cattn_peg BEFORE INSERT OR UPDATE ON pegawai1
FOR EACH ROW EXECUTE PROCEDURE cattn_peg();
4. Contoh 2
Contoh trigger berikut ini memastikan bahwa tiap kali sebuah baris pada tabel pegawai
ditambahkan (insert), dirubah (update) atau dihapus (delete), disimpan catatannya (i.e.
diaudit) pada tabel audit_peg. Yang disimpan adalah waktu dan user name, bersama dengan
operasi yang di lakukan.
CREATE TABLE pegawai2
(
nama_peg text NOT NULL,
gaji_peg integer
);
CREATE TABLE audit_peg1
(
operasi char(1) NOT NULL,
waktu timestamp NOT NULL,
userid text NOT NULL,
nama_peg text NOT NULL,
gaji_peg integer
);
CREATE OR REPLACE FUNCTION proses_audit_peg1() RETURNS TRIGGER AS
$audit_peg1$
BEGIN
--
-- Buat baris (data) pada tabel audit_peg1 untuk merefleksikan operasi
-- yang dilakukan pada tabel pegawai2, menggunakan varibel spesial TG_OP
-- untuk mengoperasikannya.
--
IF (TG_OP = 'DELETE') THEN
INSERT INTO audit_peg1 SELECT 'D', now(), user, OLD.*;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO audit_peg1 SELECT 'U', now(), user, NEW.*;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO audit_peg1 SELECT 'I', now(), user, NEW.*;
RETURN NEW;
END IF;
RETURN NULL;
-- hasil diabaikan karena trigger AFTER
END;
$audit_peg1$ LANGUAGE 'plpgsql';
CREATE TRIGGER audit_peg1
AFTER INSERT OR UPDATE OR DELETE ON pegawai2
FOR EACH ROW EXECUTE PROCEDURE proses_audit_peg1();
Keterangan :
lihat pada fungsi diatas, baris INSERT INTO .... NEW.*
5. berarti ada 2 kolom yang dimasukkan oleh * yaitu nama_peg dan gaji_peg
jadi sebenarnya yang dimasukkan adalah :
‘<huruf>’, <tanggal_sekarang>, <user_yg_mengubah>, <nama_peg> dan <gaji_peg>
Contoh 3
CREATE TABLE pegawai3
(
nama_peg TEXT NOT NULL,
gaji_peg INTEGER,
tgl_dibuat TIMESTAMP NOT NULL,
tgl_diubah TIMESTAMP,
gaji_peg_sblm INTEGER
);
buatlah trigger dengan ketentuan:
1. saat data baru dimasukkan (INSERT), secara otomatis trigger harus memasukkan :
tanggal data di buat (tgl_dibuat).
2. saat suatu data pegawai diubah (UPDATE), data yang harus diisikan adalah :
tanggal data diubah (tgl_diubah) dan
gaji pegawai sebelum diubah (gaji_peg_sblm).
Jawab :
CREATE OR REPLACE FUNCTION proses_ubah_gaji() RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'INSERT') THEN
NEW.tgl_dibuat := current_timestamp;
RETURN NEW;
ELSIF (TG_OP = 'UPDATE') THEN
NEW.tgl_diubah := current_timestamp;
NEW.gaji_peg_sblm := OLD.gaji_peg;
RETURN NEW;
END IF;
END;
$$ LANGUAGE 'plpgsql';
CREATE TRIGGER ubah_pegawai BEFORE INSERT OR UPDATE ON pegawai3
FOR EACH ROW EXECUTE PROCEDURE proses_ubah_gaji();
Anda dapat mencobanya dengan perintah :
Insert :
-- masukkan data pegawai baru dengan nama shadiq dan gaji Rp. 500.000
INSERT INTO pegawai3 (nama_peg, gaji_peg) VALUES ('shadiq', 500000);
-- Lalu lihat data pegawai shadiq yang telah di masukkan
SELECT * FROM pegawai3 WHERE nama_peg = 'shadiq';
Update :
6. -- ubah gaji pegawai shadiq menjadi Rp. 1.000.000
UPDATE pegawai3 SET gaji_peg = 1000000 WHERE nama_peg = 'shadiq';
-- Lalu lihat data pegawai shadiq yang telah di ubah
SELECT * FROM pegawai3 WHERE nama_peg = 'shadiq';
7. Contoh 4
CREATE TABLE pegawai4
(
nama_peg text NOT NULL,
gaji integer
);
CREATE TABLE log_pegawai4
(
nama_peg text NOT NULL,
operasi text NOT NULL,
tgl_dibuat timestamp,
tgl_diubah timestamp,
gaji_peg_sekarang integer,
gaji_peg_sebelumnya integer,
selisih_gaji integer
);
buat lah trigger dengan ketentuan :
1. saat meng-insert tabel pegawai4
isi tabel pegawai4_properties dengan nilai :
nama_peg : <nama pegawai>
operasi : 'Insert'
tgl_dibuat : <tanggal dan waktu pada saat itu>
gaji_peg_sekarang : <gaji pegawai saat peng-insert-an>
2. saat meng-update tabel pegawai4
isi tabel pegawai4_properties dengan nilai
nama_peg : <nama pegawai>
operasi : 'Update'
tgl_diubah : <tanggal dan waktu pada saat itu>
gaji_peg_sebelumnya : <gaji pegawai sebelum datanya di ubah>
gaji_peg_sekarang : <gaji pegawai yang di-update-kan>
selisih_gaji : <selisih gaji sebelum dan setelah datanya di update>
[nilainya selalu positif]
Jawab :
CREATE OR REPLACE FUNCTION isi_properties_pegawai4() RETURNS TRIGGER AS
$$
BEGIN
IF(TG_OP = 'INSERT') THEN
INSERT INTO log_pegawai4 (nama_peg, operasi, tgl_dibuat, gaji_peg_sekarang)
VALUES (NEW.nama_peg, TG_OP, NOW(), NEW.gaji);
RETURN NEW;
ELSIF(TG_OP = 'UPDATE') THEN
INSERT INTO log_pegawai4 (nama_peg, operasi, tgl_diubah, gaji_peg_sebelumnya,
gaji_peg_sekarang, selisih_gaji)
VALUES (NEW.nama_peg, TG_OP, NOW(), OLD.gaji, NEW.gaji , ABS(NEW.gaji-
OLD.gaji));
RETURN NEW;
END IF;
END;
$$
LANGUAGE 'plpgsql';
8. CREATE TRIGGER trg_isi_prop_peg4 BEFORE INSERT OR UPDATE ON pegawai4
FOR EACH ROW EXECUTE PROCEDURE isi_properties_pegawai4();
TG_OP
Fariabel spesial TG_OP pada PostgreSQL merefleksikan operasi apa yang dilakukan pada suatu tabel.
Namun apa yang terjadi bila berdasarkan kebijakan perusahaan, System Data Base diganti? Tentunya
Trigger-trigger yang telah kita buat belum tentu dapat digunakan lagi, karena pada DBMS lain belum
tentu ada variabel TG_OP pada trigger. solusinya : anda dapat membuat trigger untuk masing-
masing operasi, tentu jumlah trigger menjadi banyak, namun dibayar dengan dipecahkannya
permasalahan kompatibilitas dengan DBMS jenis lain.
Ex :
CREATE TRIGGER trg1_insert BEFORE INSERT ON tabelku
FOR EACH ROW EXECUTE PROCEDURE fungsi1_insert();
CREATE TRIGGER trg2_update BEFORE UPDATE ON tabelku
FOR EACH ROW EXECUTE PROCEDURE fungsi2_update();
CREATE TRIGGER trg2_delete BEFORE DELETE ON tabelku
FOR EACH ROW EXECUTE PROCEDURE fungsi3_delete();