- 浏览: 94161 次
- 性别:
- 来自: 北京
文章分类
最新评论
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体系结构
2010-08-26 11:42 1033ORACLE 体系结构 前言 很多人大楷都 ... -
详解:oracle数据库名、数据库实例名、数据库域名、数据库服务名
2010-08-26 11:28 1638数据库名(db_name) 数据 ... -
数据库优化设计方案
2010-02-24 23:39 10291 引言 数据库优化 ... -
oracle中将数据导入到指定表空间
2009-08-26 14:53 3032--创建临时表空间 create temporary ... -
使用pl/sql导出数据
2009-08-25 21:29 7650如果只导出表的结构(建表语句),不导出表的数据,可用Tools ... -
Oracle 数据库创建表空间、创建用户指定表空间
2009-08-25 17:17 1690//创建临时表空间 create temp ... -
oracle数据库文件中的导入\导出(imp/exp命令)
2009-03-11 15:36 1713Oracle数据导入导出im ... -
IP地址变化后Oracle 10g如何才能不受影响
2009-03-11 15:28 1335解决步骤如下: 1、控制面板--->添加硬件 ... -
完全卸载Oracle
2009-03-11 15:26 1551软件环境: 1、Windows XP + Oracle 10 ... -
Oracle 游标使用大全
2008-11-03 11:20 1293查询 SELECT语句用于从数据库中查询数据,当在 ... -
Oracle中的临时表用法汇总
2008-11-03 11:06 10691.语法 在Oracle中,可以创建以下两种临时表: ... -
用存储过程重置序列
2008-11-03 10:46 1160SQL> create sequence seq_1 ... -
oracle基础
2008-11-03 10:44 865建表,删表 create table temp_sea ... -
关于Oracle与SqlServer中获取所有字段、主键、外键的sql语句
2008-11-03 10:40 2207--oracle: --查询某个表中的字段名称、类型、精 ... -
SQL Server和Oracle的常用函数对比
2008-11-03 10:36 1461-------------------------数学函数 ... -
在数据库中对树进行遍历查询
2008-11-03 10:32 780目 录 一、测试准备 二、实现各种查询要求 三、要点总结 ... -
浅谈数据库设计技巧
2008-11-03 10:30 750说到数据库,我认 ... -
数据库设计的黄金经验
2008-11-03 10:28 781通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为 ... -
DBA日常sql列表
2008-11-03 10:25 779--监控索引是否使用 alter inde ... -
三种Windows版本下教你如何卸载Oracle
2008-11-03 10:23 1054在卸载Oracle时删不干净,搞的要重装系统,本人在工作中总结 ...
相关推荐
### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...
本文将详细介绍如何在不新建序列的情况下,实现Oracle序列的重置,让其从1开始增长。这种方法通过编写PL/SQL过程来动态调整序列的增量,从而达到重置的目的。 ### Oracle序列重置方法 首先,我们需要理解Oracle...
在Java应用程序中,如果需要在MySQL环境中实现类似Oracle序列的功能,我们需要自己设计解决方案。以下是一些关键知识点的详细说明: 1. **Java连接MySQL**: - 首先,你需要使用JDBC(Java Database Connectivity...
为了在MySQL中实现类似于Oracle序列的功能,可以通过创建一张特殊的表和几个自定义函数来实现。这种方法可以有效地模拟Oracle序列的行为,并能够根据指定的步长和长度来生成数值。 ##### 2.1 创建模拟序列的表 在...
4. **在应用程序中使用序列** 在Oracle PL/SQL或类似的应用程序环境中,通常通过查询`DUAL`表来获取序列的下一个值。例如,在PB(PowerBuilder)中,可以使用以下方式获取序列号: ```sql SELECT exam_no_seq....
##### 使用序列插入数据 ```sql INSERT INTO position VALUES (id.NEXTVAL - 1, '116', '39'); ``` - **`id.NEXTVAL`**:获取序列的下一个值。 ##### 查询序列的下一个值 ```sql SELECT id.NEXTVAL FROM dual; `...
当你需要在新的环境中使用这些序列时,只需在目标数据库上运行该SQL脚本即可。例如,假设你已经将`employee_seq`的导出文件命名为`employee_seq_export.sql`,你可以使用以下命令导入: ```sql @employee_seq_...
### Oracle 使用序列创建自增字段 在数据库设计与开发中,自增字段是十分常见的需求之一,尤其是在需要为每一行记录自动分配一个唯一编号的情况下。Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。...
### 二、Oracle序列 序列是Oracle提供的一种自动生成唯一数值的机制,常用于为主键或需要唯一标识符的列自动分配值。在实验中,虽然没有明确展示序列的创建与使用,但可以利用`CREATE SEQUENCE`语句来创建一个序列...
总结来说,Oracle序列是实现主键自增的有效工具,通过创建和管理序列,可以确保数据的唯一性和有序性。在实际应用中,应根据具体需求调整序列的参数,如步长、缓存大小等,以优化性能和满足业务逻辑。
Oracle序列是数据库中用于生成唯一标识符的一种机制,它们在数据表中经常被用来作为主键或外键,确保数据的唯一性和完整性。在Oracle数据库系统中,序列(Sequences)提供了一种自动递增或递减数值的方式,这对于...
在本篇中,我们将深入探讨Oracle序列的创建、修改和删除。 ### 1. 序列的创建 创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name START WITH n -- 起始值 INCREMENT BY n -- 增量值 MINVALUE n ...
批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的是一个自定义的存储过程,用于批量修改Oracle序列的当前值(CURRENT VALUE)。 首先,我们需要理解...
Oracle数据库提供了强大的序列管理功能,可以方便地创建、管理和使用序列。本文将详细介绍如何在Oracle数据库中创建自增序列,并深入探讨其相关属性和应用场景。 #### 一、什么是Oracle自增序列? Oracle自增序列...
#### 一、理解Oracle序列 在开始之前,首先需要了解Oracle中的序列。序列是一个数据库对象,它能够生成连续的整数序列。序列主要用于当需要为表中的某列自动生成唯一值时。例如,在插入新记录时,可以使用序列生成...
本文将深入探讨这两者,并展示如何在实践中使用它们。 **一、Oracle序列** 序列是一种特殊类型的数据库对象,它可以生成唯一的整数序列,常用于为数据库表的主键字段提供自动递增的值。序列的主要属性包括: 1. *...
这个触发器会在每条新记录插入`MY_TABLE`时,从`MY_SEQ`序列中获取下一个值,并将其设置为新记录的`ID`。 使用"Oracle自增序列和触发器生成工具",你可以省去手动编写这些SQL语句的步骤。只需输入相关的表结构信息...
将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;