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());
很多應用程式都依靠序列生成器來建立 ......
Oracle 函式專題 TO CHAR
to char函式提供一套有效的工具用於把各種資料型別 日期 時間,int,float,numeric 轉換成格式化的字串以及反過來從格式化的字串轉換成原始的資料型別 模板一select to char sysdate,模板 from dual 模板如下 hh 一天的小時數 01 12 hh12 一...
洛谷 堆專題 序列合併
有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。輸入格式 第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.資料規模 對於50 的資料中,滿足1 n 1000 對於...
Oracle研究專題 Oracle系統安裝與配置
最近開始研究oracle資料庫,蓋因公司的系統要麼oracle要麼是mysql吧。作為乙個it工作者,沒有碰過oracle是一件很匪夷所思得事情。想到過去幾年,乃至接觸it行業開始就只有玩過sql server,是太low了。所以從現在開始要好好學一下oracle資料庫,不僅是plsql的開發,還要...