Oracle中用序列和触发器实现ID自增

在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为主键的功能,这时Oracle可以通过“序列”和“触发器”来实现ID自动增加的功能。

1.创建序列Sequence

create sequence seq_uid
  increment by 1
  start with 1
  nomaxvalue
  nocycle
  cache 10 ;

其中:"seq_uid"表示自定义的序列名称;

   "start with 1"表示序列值从1开始;

   "increment by 1"表示序列每次增加的值为1。

序列的使用方法:

select seq_uid.nextval ID from dual

这样就得到了序列的下一个值,将这个语句放在触发器中,就可以实现类似SQL Server中ID自增的功能。

2.创建触发器Trigger

create trigger tri_uid before insert on [tablename] for each row when (new.[columnname] is null)
begin
    select seq_uid.nextval into:new.[columnname] from dual;
end;

其中:"tri_uid"表示自定义的触发器名称;

   "seq_uid"表示要使用的序列名称;

   "[columnname]"表示要实现自增的列;

   "[tablename]"表示要实现自增的列所在的数据表。

原文地址:https://www.cnblogs.com/imdeveloper/p/10334215.html

时间: 2024-07-30 19:01:13

Oracle中用序列和触发器实现ID自增的相关文章

Oracle中序列及触发器使用

总结一下这次使用的序列和触发器,也把相应的一些操作用了一下.遇到的问题比较奇葩,仅供参考. 一.序列部分(网上的) 1.建立序列SEQUENCE create sequence user_seq increment by 1 start with 1 minvalue 1 maxvalue 9999999999999 nocache order; 语法: CREATE SEQUENCE s_id NOMAXVALUE NOCYCLE --INCREMENT BY 1    -- 每次加几个 --

oracle 主键应用序列和触发器实现自动增长

oracle 主键自动增长 这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create table simon_example ( id number(4) not null primary key, name varchar2(25) ) -- 建立序列: -- Create sequence create sequence SIMON_SEQUENCE minvalue 1 maxvalue 999999999999999999999999999 start with 1

关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例

CREATE TABLE STUDENT( --创建学生表  ID NUMBER(10) PRIMARY KEY,   --主键ID  NAME VARCHAR2(20),  CLASSNAME VARCHAR2(20) --班级ID);CREATE SYNONYM STU FOR STUDENT; --给学生表STUDENT创建别名(同义词)INSERT INTO STUDENT VALUES(1,'Tom',1);INSERT INTO STUDENT VALUES(2,'Jack',1);

Oracle序列和触发器的使用

Oracle不能直接设定某字段自增,需要通过建序列和触发器,实现主键的自增功能 一.序列 1,建序列 序列的语法格式为: CREATE SEQUENCE name //name为序列的名称 [INCREMENT BY n] //n序列的步长 [START WITH n] //n序列的初始值 [{MAXVALUE / MINVALUE n | NOMAXVALUE}] //n序列的最大值或最小值 [{CYCLE | NOCYCLE}] //序列达到最大值时是否循环 [{CACHE n | NOCA

Oracle中用exp/imp命令参数详解【转】

Oracle中用exp/imp命令参数详解 [用 exp 数 据 导 出]:1  将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中   exp system/[email protected]   rows=y  indexes=y compress=n buffer=65536   feedback=100000full=y  file=d:\daochu.dmp  log=d:\daochulog.txt   owner=(ECC_BIZ,

Oracle ID 自增

实现Oracle Id自增 1.方法一 create table app_student( id integer generated by default as identity not null primary key, createtime DATE not NULL); insert into app_student(createtime) values(sysdate); 2. 方法二 创建序列 创建表 CREATE TABLE APP_USER( ID number(20) NOT N

用存储过程 给表增加序列与触发器

存储过程如下: create or replace procedure p_createseq(tablename in varchar2,key in varchar2) Authid Current_User --使用角色权限,否则无法创建序列或表 is strsql varchar2(500); t_key varchar2(500); begin --创建序列 strsql:='create sequence seq_'||tablename|| ' minvalue 1000 maxv

Oracle中序列的操作以及使用前对序列的初始化

Oracle中序列的操作以及使用前对序列的初始化 一 创建序列 create sequence myseq start with 1 increment by 1 nomaxvalue minvalue 1 二 初始化序列 select myseq.nextval from dual; 这里值得注意的是,如果先直接写select myseq.currval from dual,会提示会提示myseq.currtval尚未在此会话中定义. www.2cto.com 三 使用序列 初始化序列之后才可

Oracle修改序列(Sequence)起始值的方法

Oracle修改序列(Sequence)起始值的方法 Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多. 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx.但是,在Oracle DB中,修改序列没有这样的语法.下面介绍几种修改方式: 1.先删除序列,然后重新创建.不过这不是当前要讲的重点.这个方法比较暴