Oracle 序列,觸發器

2021-08-22 13:26:13 字數 3694 閱讀 7045

--序列是什麼

--序列就是按照一定的規則,不斷增長(不斷減少)的乙個數字 ,用於我們資料庫表裡 作為資料的乙個唯一標識。

--序列的語法

--建立序列

create sequence seq_objid --建立乙個名稱為seq_objid 的序列

increment by 1 --每次增長1 (1,2,3,4,5,6,7,)

start with 1 --以1為起點

maxvalue 20 --以20為終點

--minvalue 1

cycle --當序列達到最大值時,迴圈 no cycle就是不迴圈

cache 10 --cache的意思就是把序列預先放入記憶體,不會頻繁的進行提交事務。

--怎麼用序列

select seq_objid.nextval from dual;

create sequence seq_objid --建立乙個名稱為seq_objid 的序列

increment by 1 --每次增長1 (1,2,3,4,5,6,7,)

start with 1000000000

maxvalue 9999999999

--minvalue 1

nocycle --當序列達到最大值時,迴圈 no cycle就是不迴圈

cache 2000

--刪除序列

drop sequence seq_objid;

--修改序列 除了不能修改序列的起始值,其他的都可以修改

alter sequence seq_objid

increment by 10

maxvalue 8888888

nocycle

cache 1000

--檢視序列

select * from user_sequences;

select * from all_sequences;

--觸發器

--觸發器就是類似於js裡面的***,用來監視資料庫的各種操作,

--當某個操作發生時引起觸發器回應做相應的其他資料庫操作。

--觸發器的型別

--dml觸發器 、

--在dml語句進行觸發,可以在dml操作前或操作後進行觸發,並且可以對每個行或語句操作上進行觸發。

--替代觸發器

--由於在oracle裡,不能直接對由兩個以上的表建立的檢視進行操作。

--所以給出了替代觸發器。它就是專門為進行檢視操作的一種處理方法。

--系統觸發器

--它可以在oracle資料庫系統的事件中進行觸發,如oracle系統的啟動與關閉等。

--觸發器怎麼用

--觸發器類似過程和函式,都有宣告,執行和異常處理過程的pl/sql塊。

--語法:

create or replace trigger treigger_name

before/after --之前/之後

insert/update/delete --插入/更新/刪除

on x_table --對哪個表

--做些啥(觸發)

declare

begin

end;

create or replace trigger test_trigger

before insert or update or delete

on emp

begin

if user not in('sys','system') then

end if;

end;

update emp set sal = '10000' where deptno = 10;

--刪除觸發器

drop trigger test_trigger

--觸發器主要應用在這幾個方面

--a:刪除操作時寫日誌 或者要滿足特定的一些條件才能刪除資料

drop table t_emp;

create table t_emp as select * from emp;

select * from t_emp;

--建立乙個簡單的日誌記錄表

--先建立記錄資訊表

create table deleteemp_log(

delete_user varchar2(40),

delete_date date

);select * from deleteemp_log;

create or replace trigger delete_emp_trigger

before delete

on t_emp

begin

insert into deleteemp_log(delete_user,delete_date)values(user,sysdate);

end;

delete from t_emp where ename = 'smith';

--b:增加記錄時觸發檢查資料的完整性和正確性等程式

create or replace trigger delete_emp_trigger

before insert

on t_emp

for each row --對每行資料有效 行級觸發器

begin

if :new.sal<0 then

:new.sal :=0;

end if;

if :new.deptno > 30 then

:new.deptno :=10;

end if;

end;

insert into t_emp (empno,ename,sal,deptno)values(1,'keven',-1000,40);

select * from t_emp;

--c:修改記錄時觸發其他程式

--寫修改檔案的日誌 (oldvalue->newvalue)

create or replace trigger update_emp_trigger

before update

on t_emp

for each row

begin

if :old.ename <> :new.ename then

dbms_output.put_line('ename的值由'||:old.ename||'更改為'||:new.ename);

end if;

if :old.job <> :new.job then

dbms_output.put_line('ename的值由'||:old.job||'更改為'||:new.job);

end if;

if :old.sal <> :new.sal then

dbms_output.put_line('ename的值由'||:old.sal||'更改為'||:new.sal);

end if;

---插入日誌表

end;

update t_emp set ename= 'smiths',job='manager',sal=3000 where empno = 7369;

oracle 建序列,觸發器

oracle是全球最大的關聯式資料庫,她的使用有很多技巧,常用的建立表空間,建立序列,建立觸發器等嗾使是初學者需要掌握的內容。首先登陸資料庫 啟動命令列 cmdsqlplus 以管理員 sys 登陸資料庫 sqlplus sys password as sysdba 建立臨時表空間 create t...

序列及觸發器(oracle)

oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上identity 1,1 該字段就會從1開始,按照 1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用 auto increment 即可。但是oracle有點麻煩,...

Oracle 序列 觸發器的使用

oracle 序列 create sequence emp sequence 序列名 increment by 1 每次加幾個 start with 1 從1開始計數 nomaxvalue 不設定最大值 nocycle 一直累加,不迴圈 cache 10 制定存入快取 也就是記憶體 序列值的個數 備...