`
Freeze
  • 浏览: 111213 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle插入数据时获取自增ID

阅读更多
原来的写太乱了,估计也是别的地方COPY过来的。

简单点,

就是创建一个SEQUENCE,通过它来获取自增ID,

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


如何用?

插入的时候这样:

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


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

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

<!- Microsoft SQL Server ->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
  insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
  <selectKey resultClass="int" keyProperty="id" >
  SELECT @@IDENTITY AS ID
  </selectKey>
</insert>
分享到:
评论

相关推荐

    最新Mybatis插入数据返回自增主键详细配置

    Mybatis插入数据返回的自增主键会自动设置为插入对象的属性值,因此我们可以通过获取对象的属性获得自增的主键。 1、通过xml配置获取自增主键 xml配置 select last_insert_id() insert into sys_user(username,...

    .net实现oracle数据库中获取新插入数据的id的方法

    但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而且不会出现读错的情况,就更显得困难了,为了解决在oracle数据中插入的数据能够自增id,同时获取新数据的id,并避免因并发...

    oracle数据库主键自增并且返回主键值

    一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...

    建一个插入数据id自动增加1.txt

    Oracle建一个插入数据id自动增加1

    在oracle数据库里创建自增ID字段的步骤

    在oracle里使用自增ID字段的步骤比较繁琐,总结如下: — 创建表 CREATE TABLE ADVICE ( ID INT NOT NULL, ACTIVE INT DEFAULT 1 NOT NULL, TYPE INT NOT NULL, MSG VARCHAR2(512) NOT NULL, ADVICE VARCHAR2(4000)...

    Navicat Premium中Oracle创建主键自增的方法

    触发器名称,混合不选,每行,触发前,插入时,启用 2.下面展示触发器代码。 // An highlighted block BEGIN SELECT SEQ_EXAM_KNOWLEDGE_BASE.nextval INTO :NEW.ID FROM DUAL; END; 3.两个引用写一下 到此这...

    oracle 触发器方式实现行ID自增加

    oracle 触发器方式实现行ID自增加介绍的很详细! 大家好好学习啊

    Oracle创建主键自增表(sql语句实现)及触发器应用

    主键自增在插入数据的时候是很实用的,可以获取并操作返回的插入记录的ID,接下来介绍Oracle如何创建主键自增表,感兴趣的你可以了解下,就当是巩固知识,希望此文对你有所帮助

    oracle迁移mysql自增序列问题

    今天从oracle迁移数据到mysql碰到个需求:原先的主键字段需要改成mysql中的自增字段,而且原先数据的值不能变,以后新插入的值从原先数据最大的值开始自增。 解决办法: 构建环境: mysql&gt; CREATE TABLE test -&gt; ( ...

    oracle主键自动增长

    ysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,但我们可以用序列和触发器来实现这样的功能.

    Oracle 实现类似SQL Server中自增字段的一个办法

    由于Oracle中没有类似SQL Server中的自增字段,所以我们如果想要通过设定类似ID性质的唯一列的话,需要借助Oracle的sequence,先建立一个序列,然后在每次插入数据的时候,通过前触发器来更新ID值,并将序列的序号加...

    MySQL中实现插入或更新操作(类似Oracle的merge语句)

    主要介绍了在MySQL中实现插入或更新操作(类似Oracle的merge语句)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    oracle-use.rar_Oracle drop use_oracle

    递增,插入数据,id自增序,选出字段是否包含字母,按照当前层次级别排序,查询位数补进等

    如何在Hive、MySQL、Oracle中分别添加自增序号

    最近公司业务涉及到了在相应库中添加自增序号这种操作,闲暇之余,整理如下,仅供参考~ ... 2、向测试表中插入几条数据 insert into table xzw values (1,'row1'),(1,'row2'),(1,'row3');  3、使用row_n

    MySQL分表自增ID问题的解决方法

    当我们对MySQL进行分表操作后,将不能依赖MySQL的自动增量来产生唯一ID了,因为数据已经分散到多个表中。... 对于插入也就是insert操作,首先就是获取唯一的id了,就需要一个表来专门创建id,插入一条记录,并获取最

    ORACLE实现字段自增示例说明

    ID number(11) primary key, Name varchar(11) not null unique, Password varchar(11) not null ) 然后就是创建一个序列 代码如下: create sequence autoid start with 1 increment by 1 minvalue 1 nomaxvalue ...

    java大厂200+面试题总结(附答案)

    一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几? 如何获取当前数据库版本? 说一下 ACID 是什么? char 和 varchar 的区别是什么? float 和 double...

    mysql数据库的基本操作语法

    级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on deletecascade 或on delete set null,前者是级联删除,后者是将从表的关联列的值设置为null。 create table student( id int...

    在Spring中用select last_insert_id()时遇到问题

    一直使用的Oracle数据库,通过序列来实现自增字段,插入之前就已经获得了自增id,保存下来即可在后来的操作中使用

Global site tag (gtag.js) - Google Analytics