`
Freeze
  • 浏览: 112577 次
  • 性别: 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>
分享到:
评论

相关推荐

    jdbc 插入记录并返回自增主键值

    当我们需要向MySQL数据库插入新记录并获取自增主键的值时,JDBC提供了相应的功能来实现这一需求。本篇文章将详细讲解如何通过JDBC在Java中执行插入操作并获取自增主键。 首先,确保你已经在项目中引入了MySQL的JDBC...

    oracle中如何实现ID自增

    ### Oracle中实现ID自增的方法 #### 序列(Sequence)与触发器(Trigger)结合使用 在Oracle数据库中,实现ID自增的一种常见方法是通过结合使用序列(Sequence)和触发器(Trigger)。这种方法非常实用,特别是在...

    Oracle数据库表序列ID自增生成器

    这在多用户环境下尤其有用,确保即使在高并发环境下也能正确地自增ID,避免了ID冲突。 创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name START WITH start_value INCREMENT BY increment_value ...

    oracle实现属性的自增

    当给表中插入数据时触发触发器,触发器从序列中得到相应的数值放入相应的位置,这样实现属性的自增。 知识点一: Oracle 中没有 auto_increment 属性 Oracle 中没有像 MySQL 中一样的 auto_increment 属性来实现...

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

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

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

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

    Oracle建立自增主键

    `TRIGGER`是在特定事件发生时(如数据插入)自动执行的一段代码。通过结合`SEQUENCE`和`TRIGGER`,我们可以实现自增主键的功能。 ##### 创建TRIGGER 接下来,创建一个`TRIGGER`,该触发器将在数据插入`t_client`表...

    java快速ID自增器

    4. **数据库表锁**:在非分布式环境中,可以通过获取数据库表级别的锁来实现自增ID。但这在高并发下可能会导致性能瓶颈。 5. **Redis等缓存服务**:使用Redis的 incr 操作可以实现线程安全的自增,并且可以在多台...

    oracle里建一个自增字段示例

    接下来,创建一个触发器`sq_tridd`,该触发器在向表`SYS_SYS_LOG`插入数据时触发: ```sql CREATE OR REPLACE TRIGGER sq_tridd BEFORE INSERT ON SYS_SYS_LOG FOR EACH ROW BEGIN SELECT "SYS_SYS_LOG_id"....

    Oracle中主键自增实例

    然后在插入数据时,可以使用`NEXTVAL`函数获取序列的下一个值: ```sql INSERT INTO your_table (primary_key_column) VALUES (SEQ_PRIMARY_KEY.NEXTVAL); ``` 2. 使用触发器(Triggers): 触发器是基于数据库...

    oracle中设置自增主键参考

    - `WHEN (new.id IS NULL)`:只有当新插入的数据中主键值为空时才执行以下代码。 - `SELECT emp_sequence.nextval INTO :new.id FROM dual;`:从序列中获取下一个值并赋给当前插入行的主键。 #### 插入示例数据 ...

    oracle通过触发器,实现序列自增

    触发器是一种特殊类型的存储过程,当特定的事件发生时(如插入、更新或删除数据)会自动执行。 ##### 创建触发器示例: ```sql CREATE OR REPLACE TRIGGER WFLog_TR BEFORE INSERT ON WFLog FOR EACH ROW DECLARE ...

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

    接下来,我们将创建一个触发器,使其在插入新行时自动获取序列的下一个值并赋给行ID列。假设我们有一个名为`my_table`的表,其中`id`列需要自增的行ID: ```sql CREATE OR REPLACE TRIGGER my_trigger BEFORE ...

    如何实现Oracle自增,序列,触发器都有

    如果ID字段已有值,则触发器会确保序列值至少等于这个值,以避免未来插入的数据产生ID冲突。 这种结合使用序列和触发器的方法是Oracle中一种常见的主键自增实现方式。它不仅确保了主键的唯一性和连续性,还大大提高...

    Oracle使用序列创建自增字段

    此外,还可以通过触发器来自动为表中的字段赋值,避免手动插入时忘记指定 ID: ```sql CREATE OR REPLACE TRIGGER TRI_EMP_ID BEFORE INSERT ON T_EMPLOYEE FOR EACH ROW DECLARE NEXTID NUMBER; BEGIN IF :NEW....

    oracle 主键自增相关命令

    插入数据时,`id`字段会自动填充序列的下一个值。 5. **注意事项**: - 在Oracle中,主键类型通常为`NUMBER`,但不直接支持自增序列。需要通过上面所述的序列和触发器机制来实现。 - 如果尝试在`INSERT`语句中为...

    mybatis自增主键文档

    这样的配置意味着在插入数据时,MyBatis会自动调用`SEQ_TEST_USER_ID.nextval`来获取新的主键值。然而,这种方式不会将生成的主键值设置回插入的对象,例如`User`对象的`id`字段。 2. **MySQL 自增主键配置** ...

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

    Oracle数据库提供了一个名为Sequence的特性,用于生成唯一的递增数字,这在实现自增ID时非常有用。 首先,我们需要创建一个Sequence对象。例如,创建一个名为SEQ_test的序列,设置最小值为1,最大值为...

Global site tag (gtag.js) - Google Analytics