我们知道,在oracle中自动增长类型是依靠sequence类实现的,但是我们在插入一条数据时不能像sqlServer或者mySql中那么方便必须使用sequence.nextval来取得输入的值,能不能做到和Sqlserver一样吗,比如有表:
create table EMP
(
EMPID NUMBER(4) not null,
EMPNAME VARCHAR2(4000),
EMPPASS VARCHAR2(4000),
EMPSEX NUMBER(1),
EMPLEVELID NUMBER(4),
EMPLASTLOGINTIME DATE
)
alter table EMP
add constraint EMP_PK primary key (EMPID)
然后有一个序列:
create sequence EMP_SEQ
minvalue 1
maxvalue 9999999999
start with 10
increment by 1
cache 20;
我们现在的问题是:能不能把序列EMP_SEQ与表自动绑定起来实现插入时的方便呢?
正常的插入语句是这样的:
insert into EMP (EMPID, EMPNAME, EMPPASS, EMPSEX, EMPLEVELID, EMPLASTLOGINTIME) values (emp_seq.nextval(),'Jerry','jerry',1,3,to_date('01-04-2007 12:41:21', 'dd-mm-yyyy hh24:mi:ss')
自动绑定之后应该是这样的:
insert into EMP
(EMPNAME, EMPPASS, EMPSEX, EMPLEVELID, EMPLASTLOGINTIME)
values ('tom', '202cb962ac59075b964b07152d234b70', 1, 6, to_date('01-04-2007 22:41:21', 'dd-mm-yyyy hh24:mi:ss'));
解决方法是:
在EMP表的插入时做一个触发器,自动修改插入的EMPID的值:
create or replace trigger "BI_EMP"
before insert on "EMP"
for each row
begin
select "EMP_SEQ".nextval into :NEW.EMPID from dual;
end;
这样就可以达到我们想要的效果。插入时就可以写成:
insert into EMP
(EMPNAME, EMPPASS, EMPSEX, EMPLEVELID, EMPLASTLOGINTIME)
values ('tom', '202cb962ac59075b964b07152d234b70', 1, 6, to_date('01-04-2007 22:41:21', 'dd-mm-yyyy hh24:mi:ss'));
要注意的是:由于使用触发器在自动插入empid因此在插入时上面黑体部分内容不能省略,如果省略,依然需要手工添加一个empId的值,才能正常插入,也就是说,必须这样:
insert into EMP values (任意整数值,'Jerry','jerry',1,3,to_date('01-04-2007 12:41:21', 'dd-mm-yyyy hh24:mi:ss')
否则无法正常运行,很明显这样做复杂了程序的可读性。
相关推荐
在Oracle数据库中,表的自动增长列通常是指使用序列(SEQUENCE)或者使用Oracle提供的自动增长数据类型(例如:IDENTITY或者GENERATED AS IDENTITY),以实现表中某列值能够随着记录的增加而自动递增。本文将介绍...
### Oracle自动增长列知识点 在Oracle数据库中,实现自动增长列的功能主要依赖于`SEQUENCE`对象。通过创建一个序列(SEQUENCE),可以方便地为表中的某列自动生成唯一的值,这对于主键或者需要唯一标识符的场景非常...
在Oracle数据库中,实现自增长列的功能是一种常见的需求,尤其在设计主键或者唯一标识符时。这通常用于确保每条记录都有一个唯一的、连续的编号。在给定的文件中,通过创建表、序列和触发器的方式实现了这一功能。...
在Oracle数据库中,并没有像MySQL那样的自动增长字段特性,因此在实际应用中,我们常常需要手动实现这一功能。序列(Sequence)是Oracle提供的一种用于生成一系列唯一数值的对象,非常适合用来作为表中的主键值。 #...
在Oracle数据库系统中,与SQL Server中的`IDENTITY`特性类似,我们可以通过使用序列(Sequences)来实现字段的自动增长值。序列是一种特殊的数据库对象,它可以生成一系列有序的数值,通常用于为表的主键字段提供...
在Oracle数据库中,实现主键自动增长是一种常见的需求,尤其在设计高并发、大数据量的系统时,确保每个记录都有一个唯一且连续的标识符变得至关重要。本文将深入探讨如何利用Oracle触发器来实现这一功能,同时也会...
在插入数据时,自增长字段可由空值 '' 或 null 代替,如果 insert 语句中列出了所插入的字段,如 insert into list(name) values('aaa'), 则增长字段不用写。 Oracle 字段自增长机制可以简化开发者的工作,提高开发...
本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保数据表中的主键唯一性至关重要。 ### Oracle数据库的自动增长机制 Oracle数据库提供了强大的序列(sequence)功能来支持自动增长...
本文主要介绍如何在 Oracle 数据库中设置主键自动增长,并通过具体的示例来帮助理解整个流程。 #### 二、创建表与自增主键 ##### 1. 创建表 首先,我们需要创建一张表。这里以 `example` 表为例,该表包含四个...
综上所述,Oracle和MySQL在自动增长列的实现方式上有显著区别,Oracle依赖于序列,而MySQL直接在表定义中使用`AUTO_INCREMENT`。这些差异反映了两个数据库系统在设计哲学和功能上的不同,选择哪一个通常取决于具体的...
下面将详细介绍如何在Oracle中创建包含主键和外键的表,并利用触发器(Trigger)和序列实现主键的自动增长。 #### 一、创建包含主键和外键的表 首先,我们来看一下创建包含主键和外键的表的基本语法和步骤。 ####...
Oracle 中没有像 MySQL 中一样的 auto_increment 属性来实现属性值的自动增长。相反,Oracle 是通过序列和触发器来实现属性的自动增长的。 知识点二: 序列(Sequence) 序列是 Oracle 中的一种机制,可以生成连续...
在Oracle数据库中,当需要实现类似其他数据库系统(如MySQL、SQL Server等)中的自动增长字段功能时,通常会采用序列(sequence)和触发器(trigger)来实现这一需求。下面将详细介绍如何通过序列和触发器实现在插入...
### PowerDesigner 创建 Oracle 数据库表并设置主键...以上步骤详细介绍了如何使用PowerDesigner 12.5创建Oracle数据库表,并设置主键列的自动增长功能。这将极大地提高数据库开发的效率,并确保数据的一致性和完整性。
oracle创建表时主键自动增长方法 5 测试反复执行如下语句:insert into Test_Increase(Username) values('test')6 查看插入结果:userid username1 test2 test3 test4 test5 test6 test7 test8 test9 test
这种实现方法确保了即使在多用户环境中,行ID也能保持唯一且顺序增长。 总结起来,Oracle数据库通过触发器和序列对象相结合,能有效实现行ID的自增加功能。这种技术在需要自动维护唯一标识符的场景下非常实用,例如...
总的来说,Oracle中的Sequence提供了一种可靠且灵活的方式来生成序列号,适用于需要自动增长主键的场景。通过合理配置和使用,可以有效避免数据冲突,提高插入数据的效率。在设计数据库时,应根据具体业务需求来决定...
总的来说,通过组合使用序列和触发器,可以在Oracle中实现自增长列的功能,满足在插入新记录时自动为`ID`字段生成唯一值的需求。这种方式虽然相比其他数据库系统稍显复杂,但在Oracle环境中是标准的做法。
本文将详细介绍如何在Oracle环境中创建一个名为`tuser`的表,并实现其主键自动增长的功能。此外,还将介绍如何通过序列(sequence)来管理这个自动增长的主键值。 #### 一、创建表tuser 首先,我们需要定义`tuser`表...