成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle自增ID實現的具體操作步驟

數據庫 Oracle
以下的文章主要是對Oracle自增ID實現的實際操作步驟的描述,以下就是具體方案的描述,希望在你今后的學習中會有所幫助。

我們今天是要和大家一起討論的是Oracle自增ID實現,我對這一問題存在不解之處,前兩天在相關網站看見的資料,覺得挺好,就拿出來供大家分享,希望會給你帶來一些幫助在此方面。

首先,你要有一張表!

 

  1. CREATE TABLE example(  
  2. ID Number(4) NOT NULL PRIMARY KEY,  
  3. NAME VARCHAR(25),  
  4. PHONE VARCHAR(10),  
  5. ADDRESS VARCHAR(50) );  

 

然后,你需要一個自定義的sequence

CREATE SEQUENCE emp_sequence

INCREMENT BY 1 -- 每次加幾個

START WITH 1 -- 從1開始計數

NOMAXVALUE -- 不設置最大值

NOCYCLE -- 一直累加,不循環

NOCACHE -- 不建緩沖區

以上代碼完成了一個序列(sequence)的建立過程,名稱為emp_sequence,范圍是從1開始到無限大(無限大的程度是由你機器決定的),nocycle 是決定不循環,如果你設置了最大值那么你可以用cycle 會使seq到最大之后循環.對于nocache順便說一下如果你給出了cache值那么系統將自動讀取你的cache值大小個seq

,這樣在反復操作時會加快運行速度,但如果遭遇意外情況如當機了或oracle死了,則下次取出的seq值將和上次的不連貫.(如果連不連貫無所謂建議用cache,因為時間就是金錢呀!跑題了!)

書接上文,你只有了表和序列還不夠,還需要一個觸發器來執行它!代碼如下:

CREATE TRIGGER "觸發器名稱" BEFORE

 

  1. INSERT ON example FOR EACH ROW WHEN (new.id is null)  
  2. begin  
  3. select emp_sequence.nextval into: new.id from dual;  
  4. end;  

 

打完收工!下面你就試試插入數據吧!

 

  1. INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei'); 

ORACLE SEQUENCE的簡單介紹(自增長字段)- -

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。

1、Create Sequence

你首先要有Create Sequence或者Create AnySequence權限,

 

  1. Create Sequence emp_sequence 

INCREMENT BY 1 --每次加幾個

STARTWITH 1 --從1開始計數

NOMAXVALUE --不設置最大值

NOCYCLE --一直累加,不循環

CACHE10 ;

一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL

CURRVAL=返回sequence的當前值

NEXTVAL=增加sequence的值,然后返回sequence值

比如:

 

  1. emp_sequence.CURRVAL  
  2. emp_sequence.NEXTVAL  

 

可以使用sequence的地方:

-不包含子查詢、snapshot、VIEW的SELECT語句

-INSERT語句的子查詢中

-INSERT語句的VALUES中

-UPDATE的SET中

可以看如下例子:

 

  1. INSERT INTO emp VALUES  
  2. (empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);  
  3. SELECT empseq.currval FROM DUAL;  

 

但是要注意的是:

第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會自動增加你定義的INCREMENTBY值,然后返回增加后的值。CURRVAL總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在同一個語句里面使用多個NEXTVAL,其值就是不一樣的。明白?

如果指定CACHE值,ORACLE就可以預先在內存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。使用cache或許會跳號,比如數據庫突然不正常down掉(shutdownabort),cache中的sequence就會丟失.所以可以在createsequence的時候用nocache防止這種情況。

2、Alter Sequence

你或者是該sequence的owner,或者有ALTER ANYSEQUENCE權限才能改動sequence.可以alter除start至以外的所有sequence參數.如果想要改變start值,必須drop sequence再re-create.

Alter sequence的例子

 

  1. ALTER SEQUENCE emp_sequence  
  2. INCREMENT BY 10  
  3. MAXVALUE 10000  

 

CYCLE--到10000后從頭開始

NOCACHE;

影響Sequence的初始化參數:

SEQUENCE_CACHE_ENTRIES=設置能同時被cache的sequence數目。

可以很簡單的Drop Sequence

 

  1. DRO SEQUENCE order_seq; 

自增長及觸發器:

如何在Oracle自增ID實現類似自動增加ID的功能?

我們經常在設計數據庫的時候用一個系統自動分配的ID來作為我們的主鍵,但是在ORACLE中沒有這樣的功能,我們可以通過采取以下的功能實現自動增加ID的功能

1.首先創建sequence

 

  1. create sequence seq maxincrement by 1 

2.使用方法

 

  1. select seqmax.nextval ID from dual 

就得到了一個ID

如果把這個語句放在觸發器中,就可以Oracle自增ID實現和mssql的自動增加ID相同的功能!

建表

 

  1. CREATE TABLE "SPORTS"."LINEUP"("ID" NUMBER NOT NULL,  
  2. "TYPE" NUMBER(3) NOT NULL,  
  3. "BODY" VARCHAR2(100) NOT NULL,  
  4. "HITS" NUMBER(10) DEFAULT 0 NOT NULL,  
  5. PRIMARYKEY("ID"))  
  6. TABLESPACE "TS_SPORTS"  

 

建序列

 

  1. CREATE SEQUENCE "SPORTS"."SPORTS_LINEUP_ID_SEQ" INCREMENT BY 1  
  2. START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE  
  3. CACHE 50 NOORDER  

 

建自動更新的觸發器

 

  1. CREATE OR REPLACE TRIGGER "SPORTS"."SPORTS_LINEUP_ID_TRIGGER"  
  2. BEFORE INSERT ON "SPORTS"."LINEUP" FOR EACH ROW  
  3. DECLARE  
  4. next_id NUMBER;  
  5. BEGIN  
  6. --Get the next id number from the sequence  
  7. SELECT sports_lineup_id_seq.NEXTVAL INTO next_id FROM dual;  
  8. --Use the sequence number as the primarykey  
  9. --for there cord being inserted.  
  10. :new.id:=next_id;  
  11. END;  

 

建保護PRIMARYKEY的觸發器

 

  1. CREATE OR REPLACE TRIGGER "SPORTS"."LINEUP_ID_UPDATE_TRIGGER"  
  2. BEFORE UPDATE OF "ID" ON "SPORTS"."LINEUP" FOR EACHROW  
  3. BEGIN  
  4. RAISE_APPLICATION_ERROR(-20000,  
  5. 'sports_lineup_id_update_trigger:Update sof the ID field'  
  6. ||'arenotallowed.');  
  7. END;  

 

建刪除的觸發器

  1. create or replace trigger tr_bis_exc_req_del  
  2. before delete  
  3. on bis_exc_req  
  4. referencing old as old new as new  
  5. for each row  
  6. begin  
  7. if :old.check_status = '3' then  
  8. raise_application_error (-20001,'*****!');  
  9. return;  
  10. end if;  
  11. end;  
  12. /  

 

建更新的觸發器

  1. create or replace trigger tr_bis_exc_req_upd  
  2. before update  
  3. on bis_exc_req  
  4. referencing old as old new as new  
  5. for each row  
  6. begin  
  7. if :old.check_status = '3' then  
  8. raise_application_error (-20001,'*******!');  
  9. return;  
  10. end if;  
  11. end;   

 

責任編輯:佚名 來源: 博客園
相關推薦

2010-04-01 17:25:46

Oracle死鎖進程

2010-03-30 09:37:01

Oracle導出工具

2010-04-02 08:42:32

Oracle 游標

2010-02-24 13:06:27

WCF使用Nhiber

2010-03-02 09:39:11

保護WCF服務

2010-04-26 14:03:02

Oracle使用

2010-03-29 14:09:12

Oracle ID 自

2010-03-01 14:56:48

WCF服務引用

2010-08-03 09:25:02

DB2數據庫離線

2010-03-25 17:39:37

Python web

2009-11-23 16:43:03

PHP5安裝GD庫

2010-07-26 13:30:23

2010-08-02 17:20:12

nfs啟動Linux

2010-04-13 17:00:27

Oracle NLS_

2010-06-18 11:31:48

SQL Server數

2010-08-09 09:31:54

DB2 HADRv8.

2009-12-30 15:47:40

Silverlight

2010-08-02 12:34:09

ADSL代理設置

2011-03-17 09:06:58

iptables映射端口

2010-02-01 14:33:05

C++實現RTTI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区福利视频 | 日韩欧美在线不卡 | 精品国产一区探花在线观看 | 亚洲狠狠| 亚洲天堂成人在线视频 | 中文欧美日韩 | 91久久精品国产 | 四虎影视免费在线 | 精品欧美乱码久久久久久 | 黄色毛片免费看 | 国产精品爱久久久久久久 | 久久久久九九九女人毛片 | 超碰在线影院 | 亚洲男人天堂2024 | 日韩一区二区三区精品 | 久久乐国产精品 | 中国人pornoxxx麻豆 | 超碰97人人人人人蜜桃 | 久久综合一区二区三区 | 综合二区 | 久久99精品国产 | 亚洲风情在线观看 | 奇米影视77| 91视频中文| 国产精品av久久久久久毛片 | 免费永久av | 成人片网址| 午夜黄色 | a毛片| 毛片一区二区 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 欧美精品二区 | 国产精品美女久久久久aⅴ国产馆 | 国产二区av | 亚洲一区 | 一区二区三区免费看 | 国产精品久久av | 久久在看 | 国产精品日韩在线观看一区二区 | 亚洲一区二区三区四区五区中文 | 久久成人精品视频 |