04 序列和觸發器

2021-10-03 22:50:23 字數 2204 閱讀 9231

oracle當中序列是一組連續且不重複的值,一般用於主鍵的自增。

觸發器是乙個特殊的程式,當觸發某個事件時會自動執行,使用者不能直接呼叫,主要用於對資料庫的特定操作或系統事件進行監聽並響應。

# 建立乙個序列,從1開始,每次增加1

create sequence myseq increment by 1 start with 1;

# 查詢一次序列,自增1

select myseq.nextval from dual;

# 獲得當前序列的值

select myseq.currval from dual;

# 刪除序列

drop sequence myseq;

insert    delete      update

:new 有效 無效 有效

:old 無效 有效 有效

drop trigger tr1;--建立觸發器之前先刪除,確保建立成功

--建立乙個觸發器:emp的某一行被刪除之後,該觸發器被觸發

create trigger tr1

after delete on emp

for each row

begin

--觸發器被觸發之後執行的操作,:old代表被刪除的資料

dbms_output.put_line('emp表中'||:old.empno||'資料被人刪了');

end;

drop trigger tr2; --建立觸發器之前先刪除,確保建立成功

--建立乙個觸發器:emp新增一行之後,該觸發器被觸發

create trigger tr2

before insert on emp

for each row

begin

--觸發器被觸發之後執行的操作,:new代表被新增的資料

dbms_output.put_line('emp表中新增了'||:new.empno);

end;

# 建立乙個序列

drop sequence myseq1;

create sequence myseq1 increment by 1 start with 1;

# 建立一張表

drop table t_user;

create table t_user(id int primary key,name varchar(20));

# 使用序列插入記錄

insert into t_user(id,name) values(myseq1.nextval,'ali');

insert into t_user(id,name) values(myseq1.nextval,'xiaoli');

以上的方式必須顯式呼叫序列,只能是:

insert into t_user(id,name) values(myseq1.nextval,'xiaoli');

不能是:

insert into t_user(name) values('xiaoli');

所以,我們還需要了解隱式自增。

# 建立乙個序列

drop sequence myseq1;

create sequence myseq1 increment by 1 start with 1;

# 建立一張表

drop table t_user;

create table t_user(id int primary key,name varchar(20));

# 建立乙個觸發器

drop trigger tr1;

create trigger tr1

before insert on t_user for each row

begin

select myseq1.nextval into :new.id from dual;

end;

# 插入資料

insert into t_user(name) values('ali');

insert into t_user(id,name) values(8,'ali');--此處的8會被替換掉為序列的值

以上就是序列、觸發器以及它們的配合使用。

觸發器和序列

create sequence person sequence increment by 1 每次加幾個 start with 36 從1開始計數 nomaxvalue 不設定最大值 nocycle 一直累加,不迴圈 nocache 不建緩衝區建立乙個序列。create or replace tri...

ORACLE觸發器 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...

行級觸發器

行級觸發器 1觸發器使用for each row選項 2行級觸發器進行dml操作時,每作用一行就觸發一次。行級觸發器分類 1before行級觸發器 為了確保資料符合商業邏輯和企業規劃,應該使用約束對輸入資料加以限制。在某些情況下約束無法實現複雜的商業邏輯和企業規範,這時候可以使用before行級觸發...