oracle 下WITH CHECK OPTION用法
更新時(shí)間:2007年04月02日 00:00:00 作者:
如果視圖定義包括條件(譬如 WHERE 子句)并且其意圖是確保任何引用該視圖的 INSERT 或 UPDATE 語(yǔ)句都應(yīng)用 WHERE 子句,則必須使用 WITH CHECK OPTION 定義該視圖。這個(gè)選項(xiàng)可以確保數(shù)據(jù)庫(kù)中正在修改的數(shù)據(jù)的完整性。如果在 INSERT 或 UPDATE 操作期間違反了條件,則返回 SQL 錯(cuò)誤。
下面是一個(gè)使用了 WITH CHECK OPTION 的視圖定義的示例。要確??偸菣z查條件,WITH CHECK OPTION 是必需的。在這種情況下,我們希望確保 DEPT 總是 10。這會(huì)限制 DEPT 列的輸入值。當(dāng)使用視圖插入新值時(shí),總是強(qiáng)制執(zhí)行 WITH CHECK OPTION。
CREATE VIEW EMP_VIEW2
(EMPNO,EMPNAME,DEPTNO,JOBTITLE,HIREDATE)
AS SELECT ID,NAME,DEPT,JOB,HIREDATE FROM EMPLOYEE
WHERE DEPT=10
WITH CHECK OPTION;
如果這個(gè)子句不存在,那么某個(gè)使用該視圖的用戶(hù)就有可能更新某條記錄,使其不再屬于該視圖。例如,下列 SQL 語(yǔ)句可能會(huì)引起一些問(wèn)題。
UPDATE EMP_VIEW2 SET DEPT=20 WHERE DEPT=10;
這個(gè)語(yǔ)句的結(jié)果是該視圖現(xiàn)在不包含任何記錄,因?yàn)椴块T(mén) 10 不再有雇員了。
下面是一個(gè)使用了 WITH CHECK OPTION 的視圖定義的示例。要確??偸菣z查條件,WITH CHECK OPTION 是必需的。在這種情況下,我們希望確保 DEPT 總是 10。這會(huì)限制 DEPT 列的輸入值。當(dāng)使用視圖插入新值時(shí),總是強(qiáng)制執(zhí)行 WITH CHECK OPTION。
復(fù)制代碼 代碼如下:
CREATE VIEW EMP_VIEW2
(EMPNO,EMPNAME,DEPTNO,JOBTITLE,HIREDATE)
AS SELECT ID,NAME,DEPT,JOB,HIREDATE FROM EMPLOYEE
WHERE DEPT=10
WITH CHECK OPTION;
UPDATE EMP_VIEW2 SET DEPT=20 WHERE DEPT=10;
這個(gè)語(yǔ)句的結(jié)果是該視圖現(xiàn)在不包含任何記錄,因?yàn)椴块T(mén) 10 不再有雇員了。
相關(guān)文章
Oracle存儲(chǔ)過(guò)程入門(mén)學(xué)習(xí)基本語(yǔ)法
Oracle存儲(chǔ)過(guò)程基本語(yǔ)法學(xué)習(xí)入門(mén)必備2008-09-09Oracle下時(shí)間轉(zhuǎn)換在幾種語(yǔ)言中的實(shí)現(xiàn)
Oracle下時(shí)間轉(zhuǎn)換在幾種語(yǔ)言中的實(shí)現(xiàn)...2007-04-04Oracle row_number() over()解析函數(shù)高效實(shí)現(xiàn)分頁(yè)
Oracle row_number() over()解析函數(shù)高效實(shí)現(xiàn)分頁(yè),需要的朋友可以參考下。2011-11-11java.sql.SQLException: 內(nèi)部錯(cuò)誤: Unable to construct a Datum fro
Unable to construct a Datum from the specified input的解決方法2008-09-09