当前位置:文档之家› Oracle中如何创建使用SEQUENCES自增序列

Oracle中如何创建使用SEQUENCES自增序列

Oracle中如何创建使用SEQUENCES自增序列
Oracle中如何创建使用SEQUENCES自增序列

Oracle中如何创建使用SEQUENCES

Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方.

下面介绍一下关于sequence 的生成,修改,删除等常用的操作:

1. 创建Sequence

使用如下命令新建sequence(用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限):

CREATE SEQUENCE test_sequence

INCREMENT BY 1 -- 每次加的个数据

START WITH 1 -- 从1开始计数

NOMAXVALUE-- 不设置最大值

NOCYCLE-- 一直累加,不循环

CACHE 10 ;

[注意]

如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache 里面的取完后,oracle自动再取一组到cache。但是,使用cache可能会跳号,当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失.

因此,推荐在create sequence的时候使用nocache 选项。

2. 使用sequence:

sequence.CURRVAL -- 返回sequence的当前值

sequence.NEXTVAL -- 增加sequence的值,然后返回sequence 值

[注意]

第一次NEXTVAL返回的是初始值;

随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。

一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。

sequence 存储在数据字典中,存储于user_sequences表

LAST_NUMBER 为最终序列号,也就是sequence游标当前所在的位置。

//get sequence last_number

SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME=TEST_SEQNAME

// NEXTVAL 使游标指向下一位(增一或减一)

SELECT SEQNAME.NEXTVAL FROM USER_SEQUENCES 得到下一位游标的值

3. 修改Sequence

用户必须拥有ALTER ANY SEQUENCE 权限才能修改sequence. 可以alter除start至以外的所有sequence参数.

如果想要改变start值,必须drop sequence 再re-create.

命令格式如下:

ALTER SEQUENCE test_sequence

INCREMENT BY 10

MAXVALUE 10000

CYCLE -- 到10000后从头开始

NOCACHE ;

4. 删除Sequence

DROP SEQUENCE order_seq;

本篇文章来源于Linux公社网站(https://www.doczj.com/doc/673374050.html,) 原文链接:https://www.doczj.com/doc/673374050.html,/Linux/2012-05/59702.htm

oracle期末填空题整理

1、数据操纵语言中典型的四种语句是Insert、select 、update和delete 。 2、事务处理控制语言中的Commit命令表示提交事务,而回退事务则用ROLLBACK命令表示。 3、获取字符串变量长度的函数是LENGTH。 4、Oracle数据库中,生成唯一、连续的整数的对象是SEQUENCE(序列)。 5、PL/SQL基本语句块中的声明部分使用DECLARE关键词。 6、PL/SQL中对变量进行赋值,除了使用赋值符号?:=?外,还可以使用SELECT…INTO语句。 7、显示游标中要提取数据行,应使用FETCH关键词。 8、存储过程的参数模式除了具有In和Out外,还有IN OUT模式。 1.Oracle EnterpriseManager是一个基于 B/S的框架系统。 2.Oracle数据库的存储结构分为物理结构和逻辑结构。 3.在游标或者游标变量打开后还没有进行第一次提取时,%found属性为null。 4.在oracle中已commit或rollback作为上一个事务的结束标志及下一个新事物开始的标志。 5. DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE. 6.索引的主要目标是提高访问的速度。 7.在Oracle database 10g 系统中,可以使用DBCA工具和CREATE DATEBASE命令两种方式创建数据库。 8.命令Startup nomount只能启动数据库实例,但不能装载和打开数据库。 9.在输入URL进入Oracle Enterprice Manager Database Control 的时候,必须指出ip 地址和端口号。 10.在登录Oracle Enterprice Manager Database Control时,连接身份有两种选择,分别为normal和sysdba。 1. RDBMS的全称是关系数据库管理系统。 2. SQL*PLUS环境中的append指令的作用是追加在表的。 3. SQL*PLUS环境中的connect指令的作用是某用户连接至数据库。 4. SQL*PLUS环境中的list指令的作用是显示备份信息,缓冲区中最后命令。 5. SQL*PLUS环境中的show指令的作用是显示当前会话的。 8. 初始化参数的文件名称为 init.ora 。 9. 建立表格的语句是create table table_name(variable variable_type);。 10. 为oracle数据库中表格的每一列设定数据类型时,常用的数据类型有 number 、 char 、 varchar 、 date 。 11. oracle数据库中包含的数据约束有唯一约束、非空约束、主键约束、外键约束、 check约束。 12. 复制一个表格可以使用 create table table_name as select * from ref_table_name 。 13. 修改已经存在的表的存储参数 pfile 。 15. 创建一个简单的用户testUser, 密码为test的语句是create user testUser identified by test; 16. 创建存储过程的语句是create or replace procedure as … begin … end; 17. 创建一个视图的语句是create view as select … from table_name___ 18. 提交一个事务使用关键字___commit_____ 19. 获得两个集合的交集使用____intersect___ 20. 写出从表A中获取从第10条到第20条的sql语句select b.* from (select *,rownum rn from table_name order by col1)

oracle考题教学提纲

1.下面对数据库文件的叙述中,正确的是C A、一个表空间只能对应一个人数据库文件 B、一个数据文件可以对应多个表空间 C、一个表空间可以对应多个数据库文件 D、数据库文件存储了数据库中的所的日志信息 2.下面对数据库逻辑存储结构叙述中,正确的是__AB__ A、一个数据库实例由多个表空间组成 B、一个人段由多个区组成 C、一个人区由多个段组成 D、一个人块由多个区组成 3.下面哪种后台进程用于将数据缓冲区中的数据写入数据文件?__B__ A、LGWR B、DBWn C、CKPT D、ARCn 4.系统全局区包括下面那些区域?__ACD__ A、java池 B、软件代码区 C、数据缓冲区 D、日志缓冲区 5.解析后的sql语句会缓存到下面的SGA哪个区域中?_C___ A、java池 B、大型池 C、共享池 D、数据缓冲区 1.在SQL*Plus中链接数据库时,可以使用CONNECT命令。下面的4个选项中,哪几个命令是正确的?其中,用户名为scott,密码为tiger,数据库名为orcl。____D________ A.CONNECT scott/tiger; B.CONNECT tiger /scott; C.CONN scott/tiger as sysdba; D.CONN scott/tiger@orcl as sysdba; 2.执行语句SAVE scott_emp_query.sql APPEND,执行结果表示_____C_____。 A.如果scott_emp_query.sql文件不存在,则出现错误 B.如果scott_emp_query.sql文件已经存在,则出现错误 C.将缓冲区中的内容追加到scott_emp_query.sql文件中,如果该文件不存在,会创建该文件 D.将缓冲区中的内容替换掉 scott_emp_query.sql文件的内容,如果该文件不存在,会创建该文件 3.使用SQL*Plus中的____B_______,可以将文件中的内容检索到缓冲区,并且不执行。 A.SAVE命令 B.GET命令 C.START命令 D.SPOOL命令

Oracle创建序列的方法及技巧

Oracle创建序列的方法及技巧 日期:2008-06-23] 来源:互联网整理 前面说过,关系数据库的一个最重要的方面是,每个表必须有一个主键。许多情况下,在数据库中创建一个作为标识符的新键列是最容易的。例如,Agent s表有一个作为主键的AgentID列。但是,总是存在一个问题:从何处取得保证唯一的新编号?在一个较大的组织机构中,可能有一个人力资源部,可以建立某种处理,以便新雇员总能分配一个唯一的编号,并且在雇用某人时该数据被录入到表中。但必须有人密切关注所分配的所有编号,并且还需要检验它们唯一性的一个表单。 相对于依赖基于人工的处理,让数据库生成用作键值的编号更有意义。orac le为此目的使用序列。序列(sequence)是Oracle在需要时用来产生新值的一个编号集合。序列的两个关键点是:必须预先建立;需要代码请求生成新值。序列的编号不是在录入新行时自动生成的。你必须编写代码来生成值,并把它们存储在合适的列中。注意,可以对要自动生成编号的表的Insert事件编写一个数据库触发器。但是,Oracle中最常见的方法是在需要时生成关键值,通常是在表单上生成。 一般,在定义原始表时定义一个序列。但是,因为序列与表之间不存在直接的关系,所以可以在创建编号前建立序列。序列只需创建一次,在整个SQL*Plu s中都可以使用。 (1) 因为表中已经存在数据,找出其最大值: SELECT Max(AgentID) FROM Agents; (2) 最大值应该为15521,你可能想从一个比它大的值开始。用15522就可以了,但为保险起见,从20000开始: CREATE SEQUENCE seq_Agents INCREMENT BY 1 START WITH 20000; (3) 也是用SQL检索新值,它自动用序列定义中指定的值给计数器增量。试一下,以保证理解相应的命令: SELECT seq_Agents.NEXTVAL FROM dual; 此命令使用了人为的dual表,因为PL/SQL总是要求使用FROM子句。它应该返回值20000。如果重复此命令,它将返回20001、20002,如此等等。注意,序列简单地返回数字,不对这些数字做任何事情。由你决定使用这些数字作为新主

Oracle SYS.AUDSES$ 序列 说明

一.S YS.AUDSES$ 序列说明 1.1 MOS 说明 MOS 文档:How Sessions get Their AUDSID Identifier [ID 122230.1] Sessions connecting to an Oracle database have a number of identifiersassigned to them which can be found in the V$SESSION dynamic view. --当session 连接到Oracle 数据库时,会分配一个标识号,这个标识号可以从v$session这个视图里查询。 One of these identifiers is V$SESSION.AUDSID. This identifier is particularlyuseful because it can also be obtained by a session using the SQL functionUSERENV('SESSIONID'). In this way, a session can find its own session-related information. --其中一个标识符就是v$session.audsid. 这个标识符非常有用,因为它也可以用SQL 函数USERENV(‘SESSIONID’) 来获取,这样,session 就可以发现其关联的信息。 1.2 SESSION 获取v$session.audsid说明 A session connected to an Oracle database may obtain one of its sessionidentifiers, the Auditing Session ID, by use of the built-in USERENV SQLfunction. For example, in SQL*Plus, a query like the following can be used: SQL> select userenv('SESSIONID') from dual; USERENV('SESSIONID') -------------------- 13591 --查看当前的Auditing session id This value may be used to find out more information about the current sessionas it is also recorded in the column AUDSID of the V$SESSION dynamic view. --通过这个audid,然后和v$session结合,就可以查看session 的更多信息。Continuing the previous example: SQL> select sid,serial#,audsid,program from v$session where audsid=13591; SID SERIAL# AUDSID PROGRAM ---------- ---------- ---------- ------------------------------------------

ORACLE单据序列的概念及应用V

单据序列的概念及应用

目录 文档控制 ................................................................................................................................... i i 概述 . (4) 单据序列概念 (4) 单据序列(客户化应用) (7) AR 中的单据序列 (11) AR 中的单据序列试验 (14) 单据序列的实用意义分析 (23) 已解决问题和未解决问题 (27) 未解决问题 (27) 已解决问题 (27)

概述 本文对 Oracle ERP系统中“单据序列”的概念进行了初步的探索和实验。目的在 于进一步理解“单据序列”的概念和作用 单据序列概念 序列的概念 Oracle 对于序列概念的描述如下: 单据序列可对 Oracle Applications 产品所生成的单据进行唯一编号。利用 Oracle Applications,您可以通过在表单中输入数据并生成单据(如发票),起动一 项事务处理。单据序列会生成跟踪线索,用以标识创建了该事务处理的应用产品(如 Oracle Receivables),以及所生成的原始单据(如发票编号 1234)。 单据序列可以提供完整性的证明。例如,单据序列可用于反映每项事务处理,甚至是失败的事务处理。 单据序列还可以提供跟踪线索。例如,单据序列可以提供一条从总帐到子分类帐,再到最初影响帐户余额的单据的跟踪线索。 由于单据序列会生成跟踪数据,因此即使单据被删除,它们的跟踪记录也会保留下来。

Oracle中创建、修改、删除序列

Oracle中创建、修改、删除序列 ORACLE没有象SQL SERVER中一样的自增加字段,要实现只 能通过SEQUENCE来实现。 1、创建序列语法:(需要CREATE SEQUENCE系统权限) CREATE SEQUENCE序列名 [INCREMENT BY n] ---用于定义序列的步长。 如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。 [START WITH n] ---定义序列的初始值(即产生的第一个值),默认为1。 [{MAXVALUE/MINVALUE n|NOMAXVALUE}] ---定义序列生成器能产生的最大值。 选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增 序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是 -1。 MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是 默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生 的最小值是?10的26次方;对于递增序列,最小值是1。 [{CYCLE|NOCYCLE}] ---表示当序列生成器的值达到限制值后是否循环。 CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最 小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值 就会发生错误。 [{CACHE n|NOCACHE}]; ---CACHE(缓冲)定义存放序列的内存块的大小,默认为20。 NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

2、修改序列语法: ALTER SEQUENCE 序列名 [INCREMENT BY n] [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; *不能修改序列的初始值 3、删除序列语法: DROP SEQUENCE 序列名;

oracle主键自动增长序列

select * from (select e.*,ROWNUM rn from (select * from emp order by empno) e) where rn between 1 and 10; select * from (select e.*,ROWNUM rn from (select * from emp order by empno) e where ROWNUM<=10) where rn>=1; 首先,你要有一张表! CREA TE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME V ARCHAR(25), PHONE V ARCHAR(10), ADDRESS V ARCHAR(50) ); 然后,你需要一个自定义的sequence CREA TE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXV ALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区 以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,假如你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下假如你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但假如遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(假如连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!) 书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下: CREA TE TRIGGER "触发器名称" BEFORE INSERT ON example FOR EACH ROW WHEN (new.id is null) begin select emp_sequence.nextval into: new.id from dual; end; 打完收工!下面你就试试插入数据吧! INSERT INTO example(Name,phone,address) V alues('Cao','56498543','Heibei');

Oracle中如何创建使用SEQUENCES自增序列

Oracle中如何创建使用SEQUENCES Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方. 下面介绍一下关于sequence 的生成,修改,删除等常用的操作: 1. 创建Sequence 使用如下命令新建sequence(用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限): CREATE SEQUENCE test_sequence INCREMENT BY 1 -- 每次加的个数据 START WITH 1 -- 从1开始计数 NOMAXVALUE-- 不设置最大值 NOCYCLE-- 一直累加,不循环 CACHE 10 ; [注意] 如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache 里面的取完后,oracle自动再取一组到cache。但是,使用cache可能会跳号,当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失. 因此,推荐在create sequence的时候使用nocache 选项。 2. 使用sequence: sequence.CURRVAL -- 返回sequence的当前值 sequence.NEXTVAL -- 增加sequence的值,然后返回sequence 值 [注意] 第一次NEXTVAL返回的是初始值; 随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。 CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。 一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。 sequence 存储在数据字典中,存储于user_sequences表

Oracle序列

在Oracle数据库中,sequence等同于序列号,每次取的时候sequence 会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE SEQUENCE emp_sequence INCREMENT BY 1 ——每次加几个 START WITH 1 ——从1开始计数 MAXV ALUE ——最大值值 NOMAXV ALUE ——不设置最大值 NOCYCLE ——一直累加,不循环 CYCLE CACHE 10; 只要定义了emp_sequence,你就可以用使CURRV AL,NEXTV AL CURRV AL=返回sequence的当前值 NEXTV AL=增加sequence的值,然后返回sequence 值 例如: emp_sequence.CURRV AL emp_sequence.NEXTV AL insert into dept (deptno, dname, loc) values (emp_sequence.nextval, '物流部', '苏州'); //查询序列的当前值 select emp_sequence.currval from dual; 可以使用sequence的地方:

。不包含子查询、snapshot、VIEW的SELECT 语句 。INSERT语句的子查询中 。NSERT语句的V ALUES中 。UPDATE 的SET中 可以看如下例子: INSERT INTO emp V ALUES (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.CURRV AL FROM DUAL; 需要注意的是: 第一次NEXTV AL返回的是初始值;随后的NEXTV AL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRV AL 总是返回当前SEQUENCE的值,但是在第一次NEXTV AL初始化之后才能使用CURRV AL,否则会出错。一次NEXTV AL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTV AL,其值就会是不一样的。 - 假如指定CACHE值,Oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache. 使用cache或许会跳号,比如数据库突然不正常down掉(shutdown abort),cache 中的sequence就会丢失。所以可以在create sequence的时候用nocache防止这种情况。 2、Alter Sequence 你需要有sequence的owner,或者拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数。如果想要改变start值,必须drop sequence 再re-create . Alter sequence示例:

ORACLE相关:表空间、序列、索引、分区、游标、存储过程、分区等创建

--创建表空间 create tablespace text datafile'F:/db/ordata/hibernate/text.dbf' size10m AUTOEXTEND ON NEXT10M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; --创建用户 create user text identified by text default tablespace text --为用户分配权限 grant connect,resource,dba to text; --用户登录表的结构 create table street( id NUMBER(5) primary key not null, p_id NUMBER(5), name VARCHAR2(18) not null, constraint s_fk_p_id foreign key (p_id) references district(id) ); --创建表 create table district( id NUMBER(5) primary key not null, name VARCHAR2(18) not null ); --创建序列 create sequence seq_street start with1 increment by1 nomaxvalue cache10; create sequence seq_district start with1 increment by1 nomaxvalue cache10; drop table street; drop table district; delete district; delete street; select * from street; select * from district; delete district where id != 6;

oracle 实验-视图、序列、同义词的建立

实验七 名称:视图、序列、同义词的建立 姓名:学号:班级: 实验内容: 1.P192 2、3、4、5 2.P198 1、2 实验步骤和结果:(截图和步骤) P192: 2、利用scott.emp表创建视图并完成以下操作: (1)创建简单视图。 CONNECT scott/tiger; GRANT INSERT,UPDATE,DELETE on emp to system; CONNECT system/abc; CREATE OR REPLACE VIEW v_emp AS SELECT empno,ename,job,hiredate,deptno FROM scott.emp; 实验结果如下图所示:

(2)查看视图的结构。 DESC v_emp; 实验结果如下图所示: (3)从视图中查询数据。 SELECT*FROM v_emp WHERE deptno=10; 实验结果如下图所示:

(4)查看视图中各字段的可更新性。 SELECT*FROM USER_UPDATEBLE_COLUMNS WHERE table_name=‘V_EMP’; 实验结果如下图所示: (5)向视图中增加新数据。 INSERT INTO v_emp V ALUES(1234,'JACK','CLERK','29-4月-1963',10); 实验结果如下图所示:

(6)利用视图修改数据。 UPDATE v_emp SET ename='Mark' WHERE empno=1234; 实验结果如下图所示:

(7)利用视图删除数据。 DELETE FROM v_emp WHERE empno=1234; 实验结果如下图所示: 3、利用scott.emp创建只读视图: CREATE OR REPLACE VIEW v_emp_readonly AS SELECT empno,ename,job,hiredate,deptno FROM scott.emp WITH READ ONLY; 实验结果如下图所示:

oracle 序列的概念与使用步骤

oracle 序列的概念与使用步骤(重点在后面) 一、概念 1、序列:是oacle提供的用于产生一系列唯一数字的数据库对象。主要用于提供主键值。 2、创建序列: 创建序列的语法 CREATE SEQUENCE sequence //创建序列名称 [INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减默认是 [START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue [{MAXVALUE n | NOMAXVALUE}] //最大值 [{MINVALUE n | NOMINVALUE}] //最小值 [{CYCLE | NOCYCLE}] //循环/不循环 [{CACHE n | NOCACHE}];//分配并存入到内存中 其中: Create 创建Sequence 序列seqEmop 序列名称 Increment by 步长 Stat with 1 开始值 Maxvalue 最大值 Minvalue 最小值 NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用 CURRVAL 中存放序列的当前值 NEXTVAL 应在CURRVAL 之前指定,二者应同时有效 3、例子 Create sequence seqEmp increment by 1 start with 1 4、访问 Select seqEmp.nextval from dual; Select seqEmp.currval from dual; 5、删除序列 使用DROP SEQUENCE 语句删除序列 删除之后,序列不能再次被引用

Oracle 数据库设计实验指导书yk

Oracle数据库设计实验指导书

《Oracle 数据库设计》课程实验 一、本实验课在培养实验能力中的地位及作用 Oracle 数据库设计是软件工程专业的一门专业课。Oracle数据库是目前最流行的大型数据库平台之一,是一种极具前景的大型数据库。 该课程侧重于Oracle数据库维护和管理知识的掌握以及实际应用Oracle数据库的能力的培养。本课程设置的目的是使学生通过本课程的学习逐渐全面了解Oracle数据库,并具有对大型数据库数据库进行安全、维护等的管理技能,同时能应用Oracle数据库进行数据库结构的设计和数据库应用系统的开发。 二、应达到的实验能力标准 本实验的教学目标是使学生掌握如何使用Oracle 数据库开发系统,了解数据库设计及相关操作的基本概念与方法,进而学会建立与组织、操作数据库。上机实验的主要目标如下: (1)通过上机操作,加深对数据库系统理论知识的理解。 (2)通过使用具体的DBMS,了解一种实际的数据库管理系统并掌握其操作技术。 (3)通过上机实验,提高动手能力,提高分析问题和解决问题的能力。 (4)通过上机实验,提高动手能力,掌握大型数据库实际应用与开发技巧。 三、实验要求 学生在实验课前认真做好预习,实验结束及时提交电子版实验报告。 三、实验成绩考核方法 实验成绩在课程总成绩中占30%,包括平时每次实验考核与最后一次实验考试。

实验内容目录 实验1 Oracle常用工具的使用及数据库的创建实验2 SQL*Plus基本命令 实验3 oracle存储结构 实验4 数据对象的基本操作 实验5 数据的简单查询 实验6 数据的高级查询 实验7PL/SQL程序设计 实验8 Oracle 的存储过程与触发器 实验9 Oracle数据库安全、恢复与备份 实验10 Oracle数据库应用开发

ORACLE11g创建新表和序列插入数据

ORACLE11g创建新表和序列,使用序列插入数据后,为什么序列不是从定义的初始值1开始? 创建book表 create table book( bookID number(12)constraint pk_book primary key, bookName varchar(32)not null, price number(5,2), printTime date); 创建序列bookID create sequence bookID Start with1 Increment by1 Maxvalue999999999999 nocache nocycle; insert into book(bookid,bookname)values(bookID.Nextval,'三国演义'); insert into book(bookid,bookname)values(bookID.Nextval,'小学五年级数学'); insert into book(bookid,bookname)values(bookID.Nextval,'小学六年级数学'); insert into book(bookid,bookname)values(bookID.Nextval,'小学四年级数学'); select*from book; 插入数据后,序列却是从2开始,如下图所示。奇怪!奇怪! 问题原因: ·当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值·Oracle从11.2.0.1版本开始,提供了一个“延迟段创建”特性: 即: 当我们创建了新的表(table)和序列(sequence), 在插入(insert)语句时,序列会跳过第一个值(1)。 所以结果是插入的序列值从 2(序列的第二个值) 开始,而不是 1开始。 想要解决这个问题有两种方法: 更改数据库的“延迟段创建”特性为false(需要有相应的权限)

oracle创建序列实例

Oracle创建序列,删除序列,得到序列的例子序列的创建 create sequence seq_newsId increment by 1 start with 1 maxvalue 999999999; 得到序列的SQL语句 select seq_newsid.nextval from sys.dual; 删除序列的SQL DROP SEQUENCE seq_newsId; ====================== oracle开发中序列的使用

序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特别的Oracle程序自动生成,因而序列避免了在运用层实现序列而引起的性能瓶颈。Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。当一个序列号生成时,序列是递增,独立于事务的提交或回滚。容许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。 1)建立序列命令 CREATE SEQUENCE [user.]sequence_name [increment by n] [start with n] [maxvalue n | nomaxvalue] [minvalue n | nominvalue]; INCREMENT BY:指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。 START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。 MAXVALUE:指定序列可生成的最大值。 NOMAXVALUE:为升序指定最大值为1027,为降序指定最

Oracle使用序列和触发器实现自增ID

Oracle使用序列和触发器实现自增ID 分类:Oracle2011-12-19 16:03 1968人阅读评论(0) 收藏举报oracleinsertsqleach 需求: 向表中插入记录时,使得某列能够自动插入ID,并且插入的ID是自增的。 我们可以先创建一个序列,例如GOODS_GOODS_ID,然后每次使用如下SQL语句即可完成该功能, insert into Goods(GoodsID, name) values ( GOODS_GOODS_ID.nextval, '农夫烤鸡'); 若我们希望如下方式的SQL操作也能插入ID时,则需要另外的解法: insert into Goods(name) values ('农夫烤鸡'); 实现: 首先创建一个序列,然后为表创建一个触发器,当表插入一行时,将序列的nextval 的值插入指定列中。 [sql]view plaincopy 1./*==============================================================*/ 2./* 自增序列, GOODS.GOODS_ID GOODS_GOODS_ID.Nextval */ 3./*==============================================================*/ 4.create sequence GOODS_GOODS_ID 5.minvalue 1 6.maxvalue 99999999999999999999 7.start with 1 8.increment by 1

Oracle数据库的完整性约束和序列规则详解

Oracle数据库的完整性约束规则详解完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束: 完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。禁用约束,使用ALTER语句: 或 如果要重新启用约束: 删除约束: 或 Check 约束 在数据列上Check 约束需要一个特殊的布尔条件或者将数据列设置成TRUE,至少一个数据列的值是NULL,Check约束用于增强表中数据内容的简单的商业规则。用户使用Check约束保证数据规则的一致性。Check约束可以涉及该行同属Check约束的其他数据列但不能涉及其他行或其他表,或调用函数SYSDATE, UID,USER,USERENV。如果用户的商业规则需要这类的数据检查,那么可以使用触发器。Check约束不保护LOB数据类型的数据列和对象、嵌套表、VARRY、ref等。单一数据列可以有多个Check

约束保护,一个Check约束可以保护多个数据列。创建表的Check约束使用CREATE TABLE语句,更 改表的约束使用ALTER TABLE语句。 语法: Check约束可以被创建或增加为一个表约束,当Check约束保护多个数据列时,必须使用表约束语法。约束名是可选的并且如果这个名字不存在,那么oracle将产生一个以SYS_开始的唯一的名字。例: NOT NULL约束 NOT NULL约束应用在单一的数据列上,并且他保护的数据列必须要有数据值。缺省状况下,ORACLE允许任何列都可以有NULL值。某些商业规则要求某数据列必须要有值,NOT NULL约束将确 保该列的所有数据行都有值。例: 对于NOT NULL的ALTER TABLE语句与其他约束稍微有点不同。 唯一性约束(Unique constraint)

2015年Oracle考试题

2015年Oracle考试题 一、选择题: 1、下列各选项中,关于序列描述哪一项不正确( D )。 A. 序列是Oracle提供的用于产生一系列唯一数字的数据库对象. B.序列并不占用实际的存储空间. C.使用序列时,需要用到序列的两个伪列NEXTVAL与CURRVAL。其中,NEXTVAL 将返回序列生成的下一个值,而CURRVAL返回序列的当前值. D.在任何时候都可以使用序列的伪列CURRVAL,以返回当前序列值. 2、在oracle中,用来判断列值是否为空的操作符是( D)。 A. ==NULL B. NULLIS C. AS NULL D. IS NULL 3、下列选项中,哪一部分不是oracle实例的组成部分( C )。 A.系统全局区SGA B. PMON 后台进程 C.控制文件 D.Dnnn 调度进程 4、使用传统导出工具EXP导出SCOTT用户的所有对象时,应该选择B A.TABLES B.SCHEMAS C.OWNER D.FULL=Y 5、在oracle中,一个用户拥有的所有数据库对象统称为(B ) A. 数据库 B. 模式 C. 表空间 D. 实例 6、在Oracle中,使用HAVING子句也可以进行条件查询,以下选项说法是正确的是___C___. A. HAVING子句和WHERE子句相同 B. HAVING子句用于行的条件查询 C. HAVING子句用于已分组结果的条件查询 D. 以上皆非 8、函数头部中的RETURN 语句的作用是什么? A A.声明返回的数据类型 B.声明返回值的大小和数据类型 C.调用函数 D.函数头部不能使用RETURN 语句 9、有字符串数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其实际存储长度为( A ) A. 10 4 B. 4 4 C. 10 10 D. 4 10 10、下列哪个动作不会激发一个触发器?__B____ A.更新数据 B.查询数据 C.删除数据 D.插入数据 11、对于下面的函数,哪个语句将成功地调用?( A) CREATE OR REPLACE FUNCTION Calc_Sum (Addend_X number, Addend_Y number)

oracle序列

在Oracle中如果要设定一个独立表结构的主键为自增.其中就涉及到了Oracle 10G中关于序列(Sequence)的使用. (A)Sequence-序列的定义语法 SEquence-序列是一个数据库项.它生成一个整数序列..Oracle中序列所生成的整数通常可以用来填充独立表结构中数字类型的主键列.来实现同SQL Server 自增效果. 但是序列的定义同SQL Server下定义区别很大.在Oracle 10G官方开发手册中显得有些复杂,先来看看定义序列的(精简后,如有详细请参考官方文档.)语法: 代码 --定义序列完整语法 Create Sequence Sequence_Name [Start With start_num]--自增开始初始值 [Increment by increment_num]--每次增量 [{MaxValue maximum_num | NoMaxValue}] [{MinValue minimum_num | NoMinValue}] [{Cycle | NoCycle}] [{Cache cache_num | NoCache}] [{Order | NoOrder}]; 语法定义说明: Sequence_Name:定义序列的名称[有意义的命名]. Start With (start_num):用来定义序列的初始值.可选. 系统默认值为1. Increment By(increment_num):指定序列每次自增的增量. 可选. 系统默认值同样为1. MaxValue(maximum_num):设定序列自增最大上限整数值.maximum_num必须大于或等于start_num即初始值.同时maximum_num必须大于序列最小下限值minimum_num.[保证有意以]. NoMaxValue:是系统对序列设置的默认值. 即指定升序序列的最大值为10的27次方.降序序列的最大值为-1. NoMaxValue为系统默认值. 同理MinValue. MinValue(minimum_num):设定序列自增最小下限整数值. ,minmum_num必须小于或等于start_num即初始值. 而且minimum_num必须小于maximum_num.同理. NoMinvalue:即使序列自增下限的默认值. 升序序列的最小值为1, 降序序列最小为负的10的26次方. NoMinValue为默认值.

相关主题
文本预览
相关文档 最新文档