数据库

 首页 > 数据库 > Oracle > Oracle中的自动增长字段简析

Oracle中的自动增长字段简析

分享到:
【字体:
导读:
         摘要:环境:PLSQLDeveloper7.1.5Oracle11.2.0Oracle中不像MYSQL和MSSQLServer中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段。在Oracle中SEQUENCE被称为... Syntax...

Oracle中的自动增长字段简析

环境:PLSQL Developer 7.1.5 Oracle 11.2.0
 
Oracle 中不像MYSQL和MS SQLServer中那样指定一个列为自动增长列的方式,不过在Oracle 中可以通过SEQUENCE序列来实现自动增长字段。在Oracle 中SEQUENCE被称为序列,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
在使用SEQUENCE前需要首先定义一个SEQUENCE,定义SEQUENCE的语法如下:
[sql]
CREATE SEQUENCE sequence_name   
    www.2cto.com  
INCREMENT BY step   
  
START WITH startvalue;   
其中sequence_name为序列的名字,每个序列都必须有唯一的名字;startvalue参数值为起始数字,step参数值为步长,即每次自动增长时增加的值。一旦定义了SEQUENCE,你就可以用CURRVAL来取得SEQUENCE的当前值,也可以通过NEXTVAL来增加SEQUENCE,然后返回 新的SEQUENCE值。比如:
[sql]
sequence_name.CURRVAL   
  
sequence_name.NEXTVAL   
如果SEQUENCE不需要的话就可以将其删除:
DROP SEQUENCE sequence_name;
下面举一个使用SEQUENCE序列实现自动增长的例子。首先创建一个名称为seq_PersonId  的SEQUENCE:
[sql]
CREATE SEQUENCE seq_PersonId   
    www.2cto.com  
MINVALUE 0  
  
INCREMENT BY 1   
  
START WITH 0;   
注:如果没加这句(MINVALUE 0),可能会出现这个错误(ORA-04006: START WITH 不能小于 MINVALUE)。解决方法就是指定最小值。
然后创建T_Person表:
[sql]
CREATE TABLE T_Person   
  
(    
  
FId NUMBER (10) PRIMARY KEY,    
  
FName VARCHAR2(20),    
  
FAge NUMBER (10)   
  
);   
执行上面的SQL语句后就创建成功了T_Person表,然后执行下面的SQL语句向T_Person表中插入一些数据:
[sql]
INSERT INTO T_Person(FId,FName,FAge)   
    www.2cto.com  
VALUES(seq_PersonId.NEXTVAL,'Tom',18);   
  
   
  
INSERT INTO T_Person(FId,FName,FAge)   
  
VALUES(seq_PersonId.NEXTVAL,'Jim',81);   
  
   
  
INSERT INTO T_Person(FId,FName,FAge)   
  
VALUES(seq_PersonId.NEXTVAL,'Kerry',33);   
注意这里的INSERT语句没有为FId字段设定任何值,因为DBMS会自动为FId字段设定值。执行完毕后查看T_Person表中的内容:
FID  FNAME  FAGE
1  Tom  18
2  Jim  81
3  Kerry  33
使用SEQUENCE实现自动增长字段的缺点是每次向表中插入记录的时候都要显式的到SEQUENCE中取得新的字段值,如果忘记了就会造成错误。为了解决这个问题,我们可以使用触发器来解决,创建一个T_Person表上的触发器:
[sql]
CREATE OR REPLACE TRIGGER trigger_personIdAutoInc   
    www.2cto.com  
   BEFORE INSERT ON T_Person   
  
   FOR EACH ROW    
  
DECLARE    
  
BEGIN    
  
   SELECT seq_PersonId.NEXTVALINTO:NEW.FID FROM DUAL;   
  
END trigger_personIdAutoInc;   
这个触发器在T_Person 中插入新记录之前触发,当触发器被触发后则从seq_PersonId中取道新的序列号然后设置给FID字段。
执行下面的SQL语句向T_Person表中插入一些数据:
[sql]
INSERT INTO T_Person(FName,FAge)   
  
VALUES('Wow',22);   
  
   
  
INSERT INTO T_Person(FName,FAge)   
  
VALUES('Herry',28);   
  
   
  
INSERT INTO T_Person(FName,FAge)   
  
VALUES('Gavin',36);   
注意在这个SQL语句中无需再为FId字段赋值。执行完毕后查看T_Person表中的内容:
FID  FNAME  FAGE  www.2cto.com  
1  Tom  18
2  Jim  81
3  Kerry  33
4  Wow  22
5  Herry  28
7  Gavin  36
这个例子讲解完了,请删除T_Person表以及SEQUENCE:
[sql]
DROP TABLE T_Person;   
  
DROP SEQUENCE seq_PersonId;  
 
 
 
作者 Wentasy
Oracle中的自动增长字段简析
分享到:
Oracle创建简单的触发器练习
Oracle创建简单的触发器练习 Oracle创建简单的触发器练习   环境:PLSQL Developer 7.1.5 + Oracle 11.2.0   问题:在Oracle下使用PLSQL Developer创建简单的触发器。   解决: 步骤一:在PLSQL Developer左边的My Objects展开列表下找到Triggers,点击右键,选择新建(New);   步骤二:在弹出的对话框里填入Trigg...
Oracle中的替换变量,&变量名,&&变量名...
Oracle中的替换变量,&变量名,&&变量名简析 替换变量(仅用于SQL *Plus或者用于原理和SQL *Plus相同的开发工具): 临时存储值 利用它可以达到创建通用脚本的目的 利用它可以达到和用户交互,故在SQL *Plus中又称交互式命令   替换变量的格式式在变量名称前加一个&,以便在运行SQL命令时提示用户输入替换数据,然后按输...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……