oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上identity(1,1),該字段就會從1開始,按照+1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用「auto_increment」即可。但是oracle有點麻煩,需要使用序列和觸發器。
首先我們建立乙個員工表。
create table employee(
id int ,
deptno number,
empno number,
ename varchar2(16),
job varchar2(32),
sal float,
hiredate date,
constraint pk_employee primary key(empno)
);第二,建立員工表自動增長序列
create sequence employ_autoinc
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
nocache;
第三,建立觸發器將序列中的值賦給插入employee表的行
create or replace tirgger insert_employee_autoinc
before insert on employee
for each row
begin
select employ_autoinc.nextval into :new.id from dual;
end insert_employee_autoinc
最後測試一下我們的成果
insert into employee(deptno,empno,ename,job,sal,hiredate)
values(520,5201002,'james zhou','pd',6000,to_date('2012-10-22','yyyy-mm-dd'));
select * from employee;
當然也可以不使用觸發器,而是在插入時在sql語句中呼叫序列,例如:
insert into employee values(seq_test.nextval, ……) ;increment by 用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表序列的值是按照此步長遞減的。
start with 定義序列的初始值(即產生的第乙個值),預設為1。
maxvalue 定義序列生成器能產生的最大值。選項nomaxvalue是預設選項,代表沒有最大值定義,這時對於遞增序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。
minvalue定義序列生成器能產生的最小值。選項nomaxvalue是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是10的26次方;對於遞增序列,最小值是1。
cycle和nocycle 表示當序列生成器的值達到限制值後是否迴圈。cycle代表迴圈,nocycle代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。
cache(緩衝)定義存放序列的記憶體塊的大小,預設為20。nocache表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。
序列及觸發器(oracle)
oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上identity 1,1 該字段就會從1開始,按照 1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用 auto increment 即可。但是oracle有點麻煩,...
oracle 觸發器案例
例1 建立乙個觸發器,當職工表 emp 表被刪除一條記錄時,把被刪除記錄寫到職工表刪除日誌表中去。create table emp his as select from emp where 1 2 create or replace trigger tr del emp before delete ...
Oracle觸發器案例
建立表 create table emp empno number ename varchar2 32 str varchar2 32 create or replace trigger emp trigger before insert on emp for each row declare ps...