Rumah >pangkalan data >Oracle >Bagaimana untuk menulis pencetus oracle

Bagaimana untuk menulis pencetus oracle

WBOY
WBOYasal
2022-01-25 12:07:2015441semak imbas

Dalam Oracle, pencetus secara automatik melaksanakan pernyataan yang ditentukan apabila syarat yang ditentukan dipenuhi Ia ditulis sebagai "buat [atau gantikan] peristiwa pencetus masa pencetus nama pada nama jadual [untuk setiap baris] mula pl. /sql pernyataan tamat".

Bagaimana untuk menulis pencetus oracle

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.

Cara menulis pencetus Oracle

1 Pengenalan kepada pencetus

Takrif pencetus bermaksud apabila keadaan tertentu ditetapkan, Pernyataan tersebut yang ditakrifkan dalam bekas akan dilaksanakan secara automatik.

Oleh itu, pencetus tidak perlu dipanggil secara manual dan tidak boleh dipanggil.

Kemudian, keadaan pencetus pencetus sebenarnya ditetapkan apabila anda mentakrifkannya.

Perlu diterangkan di sini bahawa pencetus boleh dibahagikan kepada pencetus peringkat pernyataan dan pencetus peringkat baris.

Untuk pengenalan terperinci, sila rujuk maklumat di Internet Ringkasnya, pencetus peringkat kenyataan boleh dicetuskan sebelum atau selepas pelaksanaan kenyataan tertentu. Pencetus peringkat baris dicetuskan sekali apabila data baris dalam jadual pencetus yang ditentukan berubah.

Contoh khusus:

1 Pencetus peringkat penyataan yang ditakrifkan dalam jadual Apabila jadual dipadamkan, program akan melaksanakan proses operasi yang ditakrifkan dalam pencetus. Ini bermakna bahawa operasi memadam jadual adalah syarat untuk pelaksanaan pencetus.

2. Pencetus peringkat baris ditakrifkan dalam jadual Apabila baris data dalam jadual berubah, seperti memadamkan baris rekod, pencetus akan dilaksanakan secara automatik.

2. Sintaks Pencetus

Sintaks Pencetus:

create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
begin
 pl/sql语句
end

Antaranya:

  • Pencetus nama: Nama objek pencetus. Oleh kerana pencetus dilaksanakan secara automatik oleh pangkalan data, nama itu hanyalah nama dan tidak mempunyai tujuan sebenar.

  • Masa pencetus: Nyatakan bila pencetus dilaksanakan Nilai boleh diterima:

  • sebelum: Menunjukkan bahawa pencetus dilaksanakan sebelum pangkalan data. tindakan;

  • selepas: Menunjukkan bahawa pencetus dilaksanakan selepas tindakan pangkalan data.

  • Peristiwa pencetus: Nyatakan tindakan pangkalan data yang akan mencetuskan pencetus ini:

  • sisipan: Sisipan pangkalan data akan mencetuskan pencetus ini; >

  • kemas kini: Pengubahsuaian pangkalan data akan mencetuskan pencetus ini;
  • Nama jadual: Jadual tempat pencetus pangkalan data berada.
  • untuk setiap baris: Laksanakan pencetus sekali untuk setiap baris jadual. Tanpa pilihan ini, ia dilaksanakan sekali sahaja untuk keseluruhan jadual.
  • Pencetus boleh melaksanakan fungsi berikut:
  • Fungsi:

  • 1. Benarkan/hadkan pengubahsuaian pada jadual

2 jana lajur terbitan, seperti medan kenaikan automatik

3. Kuatatkan ketekalan data

4. Menyediakan pengauditan dan pengelogan

5 >6. Dayakan logik perniagaan yang kompleks

Contoh

1) Pencetus berikut dicetuskan sebelum mengemas kini jadual tb_emp, untuk tidak membenarkan jadual diubah suai pada hujung minggu:

2) Gunakan pencetus untuk melaksanakan kenaikan automatik nombor siri

Buat jadual ujian:

Buat urutan:

create or replace trigger auth_secure before insert or update or DELETE
on tb_emp
begin
  IF(to_char(sysdate,'DY')='星期日') THEN
    RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp');
  END IF;
END;
/
Salin kod sebagai berikut:

Buat pencetus:

create table tab_user(
  id number(11) primary key,
  username varchar(50),
  password varchar(50)
);

Masukkan data ke dalam jadual:

Hasil jadual pertanyaan: SELECT * FROM TAB_USER;
create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;

Tutorial yang disyorkan: "

Tutorial Video Oracle
CREATE OR REPLACE TRIGGER MY_TGR
 BEFORE INSERT ON TAB_USER
 FOR EACH ROW--对表的每一行触发器执行一次
DECLARE
 NEXT_ID NUMBER;
BEGIN
 SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL;
 :NEW.ID := NEXT_ID; --:NEW表示新插入的那条记录
END;
"

Atas ialah kandungan terperinci Bagaimana untuk menulis pencetus oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn