mysql資料庫因為其有自動+1,故一般我們不需要花費太多時間,直接用關鍵字auto_increment即可,但是oracle不行,它沒有自動增長機制。顧我們需要自己去實現。一般有兩種方式,但是這兩種方式都與序列化有關。第一種方式:序列化+觸發器;第二種方式:序列化+顯示呼叫序列化。一般我選用第一種方式。因為我們只要建立好序列化+觸發器,這樣我們就需要太多的去關注這個欄位了,觸發器會在我們插入資料時自動觸發,幫助我們進行+1操作。這正好解決了我最近做的乙個mini專案中的部門刪除操作(子部門與父部門),因為我們知道父部門總是先於子部門存在於資料庫中,如果我們額外建乙個欄位去記錄插入資料的先後順序,這樣我們在做刪除時,只要讓子部門先於父部門刪除,這樣就不會存在因為批量刪除部門,因刪除父部門遞迴刪除子部門,再刪子部門時發現沒有子部門的存在了而報異常。好了案例說完了。現在來在oracle資料庫中具體實現自增1的操作。
準備工作建表:
//準備工作建立一張表
create table dept_p(
dept_id varchar2(40) not null,
dept_name varchar2(40),
parent_id varchar2(40),
state number(11),
dept_sort number(11)
);alter table dept_p add [constraint dept_id] primary key(dept_id);
方式一:序列化+觸發器
第一步:建立序列sequence
create sequence seq_t_dept
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache 50
第二步:建立觸發器
create or replace trigger 「dept_trig」
before insert on dept_p
referencing old as old new as new for each row
declare
begin
select seq_t_dept.nextval into :new.dept_sort from dual;
end dept_trig;
第三步:插入資料測試看dept_sort是否自增
insert into dept_p values(『001』, 『安保部』, 『000』, 1);
select * from dept_p;
方式二:序列化+顯示呼叫
第一步:建立序列sequence
//建立sequence
create sequence seq_on_dept
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
第二步:顯示呼叫序列
insert into dept_p values(『001』, 『安保部』, 『000』, 1, seq_on_test.nextval);
第三步:查詢進行檢視
select * from dept_p
注://檢視序列當前值和下乙個值的檢視方式
select seq_on_dept.currval from dual;
select seq_on_dept.nextval from dual;
總結:create sequence 序列名
[increment by n]
[start with n]
;————————————————
oracle 建立欄位自增長 兩種實現方式彙總
mysql等其他資料庫中有隨著記錄的插入而表id自動增長的功能,而oracle卻沒有這樣的功能,我們有以下兩種方式可以解決欄位自增長的功能。因為兩種方式都需要通過建立序列來實現,這裡先給出序列的建立方式。create sequence 序列名 increment by n start with n ...
oracle實現自增
oracle實現自增id 建立一張t studentinfo表 create table t studentinfo id integer notnull primary key,xsname nvarchar2 120 not null,xsage integer notnull,mobile v...
oracle分頁的兩種方式
方式一 select from select rownum r e.empno from select from emp order by sal desc e where r 5 and r 8 注 在oracle中rownum永遠是從1開始的,所以where條件不能 使用 比如 蓋8層樓,123...