oracle 觸發器trigger(主鍵自增長)


觸發器trigger

觸發器我們也可以認為是存儲過程,是一種特殊的存儲過程。

存儲過程:有輸入參數和輸出參數,定義之后需要調用

觸發器:沒有輸入參數和輸出參數,定義之后無需調用,在適當的時候會自動執行。

適當的時候:觸發器與表相關,當我們對這個相關的表中的數據進行DDL(數據的添加、修改、刪除)操作的時候

 

存儲過程

觸發器

create proc proc_name

    --聲明輸入參數和輸出參數

as

    --過程體

go

create trigger tri_student_delete on student for delete

as

   …

go

 

:觸發器是在對應的操作執行完成之后才執行的

 

SQLServer的數據字典中,提供了一張表deleted用戶存儲最后一次執行刪除的數據

create trigger tri_student_delete on student for delete

as

   print '這是我們的第一個觸發器';

   select * from deleted;

go

 

 

create trigger tri_student_insert on student for insert

as

   print '這是tri_student_insert';

go

 

 

create trigger tri_student_delete_insert on student for insert,delete

as

   print '觸發器';

go

 

 

--刪除一個學生信息,如果學生的年齡<21,則不進行刪除

create trigger tri_stu_delete on student for delete

as

   declare @age int

   select  @age=sage from deleted--deleted存儲執行刪除的數據

   if(@age<21)

   begin

      raiserror('學生年齡太小,手下留情!',18,11);

      rollback;--撤銷執行的操作

   end

go

 

序列

Create Sequence gygddj_cfjczb_Sequence
 Increment by 1     -- 每次加幾個 
 start with 1       -- 從1開始計數     
 nomaxvalue         -- 不設置最大值,設置最大值:maxvalue 9999  
 nocycle            -- 一直累加,不循環    
 cache 10; 

 

可以與序列配合使用(實現自增)

 Create trigger gygddj_cfjczb_Sequence before 
 insert on gygddj_cfjczb for each row /*對每一行都檢測是否觸發*/
 begin
 select gygddj_cfjczb_Sequence.nextval into:New.AUTOID from dual;
 end;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM