`

oracle中序列的使用

阅读更多
1.基本语法
(1) 创建序列命
CREATE SEQUENCE [user.]sequence_name
[INCREMENT BY n]
[START WITH n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
[CYCLE|NOCYCLE]
[CACHE|NOCACHE]
[ORDER|NOORDER]
;
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
CYCLE:循环使用,用大最大值再返。 CACHE:指定cache的值。如果指定CACHE值,oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
ORDER:顺序使用序列值。

(2) 更改序列
ALTERSEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE|NOCACHE]
[ORDER|NOORDER]


(3) 删除序列
DROP SEQUENCE [user.]sequence_name;

2. 序列的使用
序列提供两个方法,NextVal和CurrVal。
NextVal:取序列的下一个值,一次NEXTVAL会增加一次sequence的值。
CurrVal:取序列的当前值。

但是要注意的是:第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。


3.创建连续编号表 SEQUENCE + TRIGGER
3.1 创建表
create or replace table test_table
(
idd number(3),
named varchar2(20)
);
/

3.2 创建序列sequence_test_table_id:
create sequence "sequence_test_table_id" increment by 1 start with 1 minvalue 1 maxvalue 999 cycle nocache order;

3.3 创建触发器
要使用sequence,还必须用上oracle的triger(触发器)
create or replace trigger trigger_insert_sequence
before insert on test_table
referencing old as old new as new

*表明在向test_table插入每一行之前触发
for each row
begin
*读取sequence_test_table_id的下一个值赋给test_table的新idd
select sequence_test_table_id.nextval into :new.idd from dual; 

exception
when others then
-- consider logging the error and then re-raise
raise;
end trigger_insert_sequence

3.4 测试
insert into test_table(named) values(sysdate);

如果,我们希望序列包含更多的信息,比如日期等,以便日后做统计用,可以吗?
当然可以!

我们可以在triger那里打主意:)
比如我们要在序列里加上日期20030225xxx,后面的xxx表示是从序列里的来值。
先要更新表:
alter table test_table modify (id number(11) )   *扩展列宽
然后修改triger
create or replace trigger trigger_insert_sequence
before insert on test_table
referencing old as old new as new
for each row begin

select to_char(sysdate,'yyyymmdd')||lpad(sequence_test_table_id.nextval,3,'0') into :new.idd from dual; 


exception
when others then
-- consider logging the error and then re-raise
raise;
end trigger_insert_sequence
分享到:
评论

相关推荐

    Oracle数据库中序列的使用

    ### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...

    oracle 不用新建序列 重置序列(从1开始增长)

    本文将详细介绍如何在不新建序列的情况下,实现Oracle序列的重置,让其从1开始增长。这种方法通过编写PL/SQL过程来动态调整序列的增量,从而达到重置的目的。 ### Oracle序列重置方法 首先,我们需要理解Oracle...

    java通过Mysql实现类似oracle序列功能序列.rar

    在Java应用程序中,如果需要在MySQL环境中实现类似Oracle序列的功能,我们需要自己设计解决方案。以下是一些关键知识点的详细说明: 1. **Java连接MySQL**: - 首先,你需要使用JDBC(Java Database Connectivity...

    mysql生成oracle序列

    为了在MySQL中实现类似于Oracle序列的功能,可以通过创建一张特殊的表和几个自定义函数来实现。这种方法可以有效地模拟Oracle序列的行为,并能够根据指定的步长和长度来生成数值。 ##### 2.1 创建模拟序列的表 在...

    轻松掌握oracle数据库开发中序列的使用

    4. **在应用程序中使用序列** 在Oracle PL/SQL或类似的应用程序环境中,通常通过查询`DUAL`表来获取序列的下一个值。例如,在PB(PowerBuilder)中,可以使用以下方式获取序列号: ```sql SELECT exam_no_seq....

    oracle 建表 建序列

    ##### 使用序列插入数据 ```sql INSERT INTO position VALUES (id.NEXTVAL - 1, '116', '39'); ``` - **`id.NEXTVAL`**:获取序列的下一个值。 ##### 查询序列的下一个值 ```sql SELECT id.NEXTVAL FROM dual; `...

    oracle导出序列

    当你需要在新的环境中使用这些序列时,只需在目标数据库上运行该SQL脚本即可。例如,假设你已经将`employee_seq`的导出文件命名为`employee_seq_export.sql`,你可以使用以下命令导入: ```sql @employee_seq_...

    Oracle使用序列创建自增字段

    ### Oracle 使用序列创建自增字段 在数据库设计与开发中,自增字段是十分常见的需求之一,尤其是在需要为每一行记录自动分配一个唯一编号的情况下。Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。...

    oracle索引、序列和权限设置

    ### 二、Oracle序列 序列是Oracle提供的一种自动生成唯一数值的机制,常用于为主键或需要唯一标识符的列自动分配值。在实验中,虽然没有明确展示序列的创建与使用,但可以利用`CREATE SEQUENCE`语句来创建一个序列...

    oracle 创建id主键序列 脚本

    总结来说,Oracle序列是实现主键自增的有效工具,通过创建和管理序列,可以确保数据的唯一性和有序性。在实际应用中,应根据具体需求调整序列的参数,如步长、缓存大小等,以优化性能和满足业务逻辑。

    Oracle 序列

    Oracle序列是数据库中用于生成唯一标识符的一种机制,它们在数据表中经常被用来作为主键或外键,确保数据的唯一性和完整性。在Oracle数据库系统中,序列(Sequences)提供了一种自动递增或递减数值的方式,这对于...

    oracle序列创建、修改、删除

    在本篇中,我们将深入探讨Oracle序列的创建、修改和删除。 ### 1. 序列的创建 创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name START WITH n -- 起始值 INCREMENT BY n -- 增量值 MINVALUE n ...

    批量修改Oracle序列值的存储过程

    批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的是一个自定义的存储过程,用于批量修改Oracle序列的当前值(CURRENT VALUE)。 首先,我们需要理解...

    oracle自增序列

    Oracle数据库提供了强大的序列管理功能,可以方便地创建、管理和使用序列。本文将详细介绍如何在Oracle数据库中创建自增序列,并深入探讨其相关属性和应用场景。 #### 一、什么是Oracle自增序列? Oracle自增序列...

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

    #### 一、理解Oracle序列 在开始之前,首先需要了解Oracle中的序列。序列是一个数据库对象,它能够生成连续的整数序列。序列主要用于当需要为表中的某列自动生成唯一值时。例如,在插入新记录时,可以使用序列生成...

    详解Oracle序列和触发器的使用

    本文将深入探讨这两者,并展示如何在实践中使用它们。 **一、Oracle序列** 序列是一种特殊类型的数据库对象,它可以生成唯一的整数序列,常用于为数据库表的主键字段提供自动递增的值。序列的主要属性包括: 1. *...

    Oracle自增序列和触发器生成工具.zip

    这个触发器会在每条新记录插入`MY_TABLE`时,从`MY_SEQ`序列中获取下一个值,并将其设置为新记录的`ID`。 使用"Oracle自增序列和触发器生成工具",你可以省去手动编写这些SQL语句的步骤。只需输入相关的表结构信息...

    更新数据库中所有序列到当前所使用的大小(oracle)

    将ORACLE数据库中的序列更新到所使用到的大小,适用于导入数据库后序列重复问题

    Oracle 创建和使用序列

    --使用序列 insert into user_table(user_id,user_name,user_pwd) vlaues(seq_user.nextval,'tcy','tcy'); --修改序列 alert sequence seq_user increment by 5 maxvalue 100000 nocycle nocache;

Global site tag (gtag.js) - Google Analytics