【oracle序列专题】(转载)
ORACLE没有象SQL SERVER中一样的自增加字段,要实现只能通过SEQUENCE来实现
1.创建序列:
create sequence your_seq
nocycle
maxvalue 9999999999
start with 1;
2.使用触发器实现自增:
create or replace trigger your_seq_tri
before insert on your_table1 for each row
declare
next_id number;
begin
select your_seq.nextval into next_id from dual;
:new.id := next_id;
end;
在oracle中,为了方便我常常用触发器及序列结合起来实现,下面就是一个示例。
先建表、再建序列、然后是触发器,最后测试
=============================================
--为主键指定序列编号
--2003-10-8 15:53
=============================================
conn scott/tiger@powermis
drop table foo;
create table foo(
id number primary key,
data varchar2(100));
create sequence foo_seq;
create or replace trigger bifer_foo_id_pk
before insert
on foo
for each row
begin
select foo_seq.nextval into :new.id from dual;
end;
/
insert into foo(data)
values('Chirstopher');
insert into foo(id,data)
values(5,'Sean');
select * from foo;
Oracle8i引入了SYS_GUID这个概念,它同Oracle管理员所使用的传统的序列(sequence)相比具有诸多优势。
一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选择陈述式的时候自动地递
增该系列。
序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不适合将它用作并行或者远程环境里的主关键
字,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。SYS_GUID会保证它创建的标识符在
每个数据库里都是唯一的。
此外,序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一
的)。
SYS_GUID源自不需要对数据库进行访问的时间戳和机器标识符,这就节省了查询的消耗。
create table use_seq_table(id integer);
create sequence use_seq_sequence;
insert into use_seq_table values (use_seq_sequence_value.nextval);
REM - for some reason, the documentation uses raw(32)
create table use_guid_table(id raw(16));
insert into use_guid_table(sys_guid());
很多应用程序都依靠序列生成器来创建
相关文档:
1.Oracle删除重复记录.
删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录.
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not i ......
原文地址:http://www.phontol.com/20090719_525808_1.html
1 LogMiner 的用途
Oracle LogMiner 是 Oracle公司从产品 8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得 Oracle重作日志文件(归档日志文件)中的具体内容,特别是,该 工具可以分析出所有对于数据库操作的 DML(insert、update、 ......
在使用Oracle中使用Rownum,会有些误解,现整理下网友们的文章,希望能有所帮助,呵呵
对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果 ......
--oralce中从表中随机取出n条记录
select * from (select t.*,dbms_random.random num from fms_branch_info t order by num)
where rownum <= 5;
--取前十行
SELECT t.* from fms_branch_info t
WHERE ROWNUM != 10
--WHERE ROWNUM between 1 and 10
ORDER BY branch_code;
......