日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Oracle數(shù)據(jù)庫(kù)Constraint約束的常用操作及異常處理

繼上次我們介紹了:Oracle數(shù)據(jù)庫(kù)中Constraint約束的四對(duì)屬性,本次我們就介紹一下Oracle數(shù)據(jù)庫(kù)Constraint約束的常用操作及異常處理,接下來(lái)就讓我們來(lái)一起了解一下這部分內(nèi)容。

1.報(bào)告約束異常

如果校驗(yàn)約束時(shí)存在異常,則返回一個(gè)錯(cuò)誤,且完整性約束仍保持未被校驗(yàn)狀態(tài)。當(dāng)約束存在異常時(shí),一個(gè)語(yǔ)句就不能正確執(zhí)行,則此語(yǔ)句被回滾。如果存在異常,必須要更新或刪除了約束的所有異常后,才可以校驗(yàn)約束。但是在使用ALTER TABLE語(yǔ)句不能確定哪一行違反約束,為了確定哪一行,在發(fā)布ENABLE子句中帶有EXCEPTION選項(xiàng)的ALTER TABLE語(yǔ)句。

EXCEPTION選項(xiàng)將ROWID、OWNER、TABLE、ROWID、CONSTRAINT放到一個(gè)指定的表中。在啟用約束前,硬創(chuàng)建一個(gè)合適的異常報(bào)告表,用來(lái)接收ENABLE子句的EXCEPTION選項(xiàng)信息,可以直接執(zhí)行'?\rdbms\admin\utlexcpt.sql'或'?\rdbms\admin\utlexcpt1.sql'腳本來(lái)進(jìn)行創(chuàng)建。注意:這兩個(gè)腳本的區(qū)別在于數(shù)據(jù)庫(kù)的兼容性級(jí)別和所分析的表的類(lèi)型。

使用的語(yǔ)法如下:

ALTER TABLE dept ENABLE PRIMARY KEY EXCEPTIONS INTO EXCEPTIONS;

或者

alter table team disable validate constraint id_num EXCEPTIONS INTO EXCEPTIONS;--這個(gè)方法不創(chuàng)建索引

如果存在異常,則直接查詢(xún) SELECT * FROM EXCEPTIONS; 即可。如果需要更加詳細(xì)的信息,則可以使用ROWID與原表的ROWID進(jìn)行關(guān)聯(lián),這樣就可以查出原始表中當(dāng)前行的所有信息,并進(jìn)行修改。

如何利用EXCEPTIONS來(lái)處理實(shí)踐中的一些問(wèn)題:

(1)在已有的constraint上加載數(shù)據(jù)

先disable,再加載數(shù)據(jù),然后enable and EXCEPTIONS INTO EXCEPTIONS,根據(jù)EXCEPTIONS表的紀(jì)錄delete,最后再enable。

(2)新建constraint,原有的數(shù)據(jù)違反了這個(gè)約束

先create disable,再enable and EXCEPTIONS INTO EXCEPTIONS

以下是一個(gè)新建外鍵的例子:

 
 
 
  1. alter table team add constraint id_num foreign key(id) references games(scores) INITIALLY disable;  
  2.  
  3. alter table team enable constraint id_num EXCEPTIONS INTO EXCEPTIONS;  
  4.  
  5. select * from EXCEPTIONS; 

2.關(guān)于contraint的一些常見(jiàn)操作

定義約束:

 
 
 
  1. alter table t add constraint ch_100 unique(id) disable ;  
  2.  
  3. alter table t add constraint ch_100 unique(id);  
  4.  
  5. alter table t add constraint ch_100 unique(id) deferred deferrable novalidate;  
  6.  
  7. CREATE TABLE dept_20  
  8.  
  9. (employee_id NUMBER(4),  
  10.  
  11. commission_pct NUMBER(7,2),  
  12.  
  13. department_id,  
  14.  
  15. CONSTRAINT fk_deptno  
  16.  
  17. FOREIGN KEY (department_id)  
  18.  
  19. REFERENCES departments(department_id)  
  20.  
  21. on delete/set null cascade);  
  22.  
  23. ALTER TABLE dept_20  
  24.  
  25. ADD CONSTRAINT fk_empid_hiredate  
  26.  
  27. FOREIGN KEY (employee_id, hire_date)  
  28.  
  29. REFERENCES hr.job_history(employee_id, start_date)  
  30.  
  31. EXCEPTIONS INTO EXCEPTIONS;  
  32.  
  33. CREATE TABLE divisions  
  34.  
  35. (div_no NUMBER CONSTRAINT check_divno  
  36.  
  37. CHECK (div_no BETWEEN 10 AND 99)  
  38.  
  39. DISABLE,  
  40.  
  41. div_name VARCHAR2(9) CONSTRAINT check_divname  
  42.  
  43. CHECK (div_name = UPPER(div_name))  
  44.  
  45. DISABLE,  
  46.  
  47. office VARCHAR2(10) CONSTRAINT check_office  
  48.  
  49. CHECK (office IN ('DALLAS','BOSTON',  
  50.  
  51. 'PARIS','TOKYO'))  
  52.  
  53. DISABLE); 

注:在使用外鍵參考了PRIMARY或UNIQUE鍵時(shí),不能停用或刪除被參考約束

延遲校驗(yàn)的啟用停用:

 
 
 
  1. SET CONSTRAINT(s) unq_num/all immediate;  
  2.  
  3. SET CONSTRAINT(s) unq_num/all deferred; 

停用:

 
 
 
  1. ALTER TABLE dept DISABLE CONSTRAINT dname_ukey;  
  2.  
  3. ALTER TABLE dept DISABLE PRIMARY KEY KEEP INDEX,  
  4.  
  5. DISABLE UNIQUE (dname, loc) KEEP INDEX; 

啟用非校驗(yàn):

 
 
 
  1. ALTER TABLE dept ENABLE CONSTRAINT dname_ukey;  
  2.  
  3. ALTER TABLE dept ENABLE NOVALIDATE PRIMARY KEY,  
  4.  
  5. ENABLE NOVALIDATE UNIQUE (dname, loc); 

啟用校驗(yàn):

 
 
 
  1. ALTER TABLE dept MODIFY CONSTRAINT dname_ukey VALIDATE;  
  2.  
  3. ALTER TABLE dept MODIFY PRIMARY KEY ENABLE NOVALIDATE; 

若要停用/刪除相關(guān)的FOREIGN KEY約束,則:

ALTER TABLE dept DISABLE PRIMARY KEY CASCADE;

刪除:

 
 
 
  1. ALTER TABLE dept DROP UNIQUE (dname, loc);  
  2.  
  3. ALTER TABLE emp DROP PRIMARY KEY KEEP INDEX,  
  4.  
  5. DROP CONSTRAINT dept_fkey; 

關(guān)于Oracle數(shù)據(jù)庫(kù)Constraint約束的一些基本操作就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. 數(shù)據(jù)庫(kù)集群中間件CJDBC詳細(xì)介紹
  2. SQL Server 2005無(wú)法連接到本地服務(wù)器的解決
  3. Linux下重新配置MySQL數(shù)據(jù)庫(kù)引擎innodb的過(guò)程
  4. SQL Server通過(guò)整理索引碎片和重建索引提高速度
  5. Linux+Oracle 10g RAC雙網(wǎng)卡綁定和解除綁定的實(shí)現(xiàn)

本文標(biāo)題:Oracle數(shù)據(jù)庫(kù)Constraint約束的常用操作及異常處理
轉(zhuǎn)載來(lái)于:http://www.5511xx.com/article/djdcoeg.html