全部产品
Search
文档中心

PolarDB:Membuat pemicu

更新时间:Jul 02, 2025

Anda dapat menggunakan pernyataan CREATE TRIGGER untuk mendefinisikan dan memberi nama pemicu yang akan disimpan dalam database.

Sintaksis

Definisikan pemicu baru.

CREATE TRIGGER

Ringkasan

CREATE [ OR REPLACE ] TRIGGER name
  { BEFORE | AFTER | INSTEAD OF }
  {INSERT | UPDATE | DELETE}
      [ OR { INSERT | UPDATE | DELETE } ] [, ...]
    ON table
  [ REFERENCING { OLD AS old | NEW AS new } ...]
  [ FOR EACH ROW ]
  [ WHEN condition ]
  [ DECLARE
      [ PRAGMA AUTONOMOUS_TRANSACTION; ]
      declaration; [, ...] ]
    BEGIN
      statement; [, ...]
  [ EXCEPTION
    { WHEN exception [ OR exception ] [...] THEN
        statement; [, ...] } [, ...]
  ]
    END

Deskripsi

CREATE TRIGGER mendefinisikan pemicu baru. CREATE OR REPLACE TRIGGER membuat pemicu atau mengganti definisi yang sudah ada.

Jika Anda menggunakan pernyataan CREATE TRIGGER untuk membuat pemicu, nama pemicu baru tidak boleh sama dengan pemicu lain yang sudah ada pada tabel yang sama. Pemicu baru dibuat di skema yang sama dengan tabel tempat kejadian pemicu didefinisikan.

Untuk memperbarui definisi pemicu yang sudah ada, gunakan pernyataan CREATE OR REPLACE TRIGGER.

Ketika menggunakan sintaksis yang kompatibel dengan basis data Oracle untuk membuat pemicu, pemicu tersebut berjalan sebagai fungsi SECURITY DEFINER.

Parameter

Parameter Deskripsi
name Nama pemicu yang ingin Anda buat.
BEFORE | AFTER Menentukan apakah pemicu dipicu sebelum atau setelah kejadian pemicu.
INSERT | UPDATE | DELETE Mendefinisikan kejadian pemicu.
table Nama tabel atau tampilan tempat kejadian pemicu terjadi.
condition Ekspresi Boolean yang menentukan apakah pemicu benar-benar akan dieksekusi. Jika kondisi bernilai TRUE, pemicu dipicu.

Jika definisi pemicu mencakup kata kunci FOR EACH ROW, klausa WHEN dapat merujuk ke kolom nilai baris lama dan/atau baru setelah Anda menulis OLD.column_name atau NEW.column_name, masing-masing. Pemicu INSERT tidak dapat merujuk ke OLD, dan pemicu DELETE tidak dapat merujuk ke NEW.

Jika pemicu berisi kata kunci INSTEAD OF, ia tidak boleh berisi klausa WHEN.

Klausa WHEN tidak dapat berisi subquery.

REFERENCING { OLD AS old | NEW AS new } ... Klausa REFERENCING untuk merujuk baris lama dan baris baru, tetapi dibatasi bahwa old hanya dapat digantikan oleh pengenal bernama old atau ekuivalen apa pun yang disimpan dalam huruf kecil semua, misalnya, REFERENCING OLD AS old, REFERENCING OLD AS OLD, atau REFERENCING OLD AS "old". Selain itu, new hanya dapat digantikan oleh pengenal bernama new atau ekuivalen apa pun yang disimpan dalam huruf kecil semua, misalnya, REFERENCING NEW AS new, REFERENCING NEW AS NEW, atau REFERENCING NEW AS "new".

Satu atau kedua frasa OLD AS old dan NEW AS new dapat ditentukan dalam klausa REFERENCING, misalnya, REFERENCING NEW AS New OLD AS Old.

Klausa ini tidak kompatibel dengan basis data Oracle karena pengenal selain old atau new tidak dapat digunakan.

FOR EACH ROW Menentukan apakah pemicu harus dipicu sekali untuk setiap baris yang terpengaruh oleh kejadian pemicu atau hanya sekali per pernyataan SQL. Jika ditentukan, pemicu dipicu sekali untuk setiap baris yang terpengaruh (pemicu tingkat baris). Sebaliknya, pemicu adalah pemicu tingkat pernyataan.
PRAGMA AUTONOMOUS_TRANSACTION Direktif yang menetapkan pemicu sebagai transaksi otonom.
declaration Deklarasi variabel, tipe, REF CURSOR, atau subprogram. Jika deklarasi subprogram disertakan, mereka harus dideklarasikan setelah semua deklarasi variabel, tipe, dan REF CURSOR lainnya.
statement Pernyataan Bahasa Proses Terstruktur (SPL). Perhatikan bahwa blok DECLARE - BEGIN - END dianggap sebagai pernyataan SPL. Oleh karena itu, tubuh pemicu dapat berisi blok bersarang.
exception Nama kondisi pengecualian, seperti NO_DATA_FOUND dan OTHERS.