ITPub博客

首页 > 数据库 > Oracle > oracle创建序列实现自增长,获取自增长id

oracle创建序列实现自增长,获取自增长id

Oracle 作者:lunar2009 时间:2013-06-01 15:14:15 0 删除 编辑
创建一个SEQUENCE,通过它来获取自增ID,

Sql代码
  1. CREATE SEQUENCE MY_TABLE_SEQ; --创建了一个SEQUENCE  

CREATE SEQUENCE MY_TABLE_SEQ; --创建了一个SEQUENCE


如何用?

插入的时候这样:

Sql代码
  1. INSERT INTO MY_TABLE (ID) VALUES (MY_TABLE_SEQ.NEXTVAL);  

INSERT INTO MY_TABLE (ID) VALUES (MY_TABLE_SEQ.NEXTVAL);


要把当前这个ID返回可以这样:

Sql代码
  1. SELECT MY_TABLE_SEQ.CURRVAL FROM DUAL;  

SELECT MY_TABLE_SEQ.CURRVAL FROM DUAL;




注意:
MY_TABLE_SEQ.CURRVAL 要和 MY_TABLE_SEQ.NEXTVAL配合起来用。
先MY_TABLE_SEQ.NEXTVAL了,才能取MY_TABLE_SEQ.CURRVAL。

-------------------------------------历史的分割线----------------------------------

一、分页显示

与PGsql mysql 使用limit 不同oracle可以使用以下语句进行分页处理:

$query= 'Select * from (Select A.*,RowNum Rn from ('.$query.') A Where RowNum <='.$end.') where Rn>='.$start;



说明:

$query:是你需要分页显示的SQL

RowNum:是返回结果集的记录序号

$start $end:是分页的起始序号

二、自增字段:

表atable(id,a) id需要自增 首先建立一个序列:

create sequence seq_atable minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache
 
 


有二种方式使用自增字段:

使用序列 触发器实现自增,插入语句不需要管自增字段
如:create or replace trigger trg_atable before insert on atable for each row begin select seq_atable.nextval into :new.id from dual; end;

插入数据:insert into atable(a) values('test');


仅使用序列,需要在插入数据时,自增字段插入序列下一个值
如:insert into atable(id,a) values(seq_atable.nextval,'test');

三、返回刚插入记录的自增字段值

如上面的例子,我们插入一条记录后,我想马上返回刚插入的记录的ID号,我该怎么处理呢?

首先要解决自增字段的问题,上面的二种方法哪种更适合这种用法呢? 建议使用第二种自增序列,否则处理起这个问题来比较麻烦。

使用自增字段的第二种方法,在插入一条记录后马上执行一下下面的语句即返回当前插入数据的ID。

$query="select seq_atable.currval from dual";

seq_atable.currval 的值只有在同一次会话中,发生seq_atable.nextval后有效:)所以不会存在取错值的问题。


~~~~~~~~~~~~~~~~~~~~~~~~
Microsoft SQL Server里获取自增ID



  insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
  
  SELECT @@IDENTITY AS ID
  
<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22901116/viewspace-1116920/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-11-19