日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

oracle 视图使用rownum,Oracle数据对象--视图

發(fā)布時間:2025/4/16 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 视图使用rownum,Oracle数据对象--视图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、為什么使用視圖(1)限制數(shù)據(jù)的存取:用戶只能看到基表的部分信息。

(2)使得復(fù)雜的查詢變得容易:視圖中的數(shù)據(jù)可能來自多個表。

(3)使得數(shù)據(jù)相對比較獨立:從項目開發(fā)的角度,模塊對應(yīng)視圖,模塊包含多個表,模塊發(fā)生變化后只需修改相應(yīng)的視圖,對應(yīng)的表的結(jié)構(gòu)無需修改。

(4)代表對同一數(shù)據(jù)的不同視角:不同部門的員工只能看到本部門的信息。

2、創(chuàng)建視圖CREATE VIEW empvu10

AS SELECT empno, ename,

job

FROM emp1

WHERE deptno=30

/ (定義視圖的查詢中不能使用ORDER BY子句)

3、查詢視圖視圖定義的SELECT語句保存在LONG型的TEXT字段中。

使用SET LONG

150增加LONG型最大顯示寬度,默認為80

select * from user_views

/

語法說明

CREATE [OR

REPLACE] [FORCE|NOFORCE] VIEW view

[(alias[, alias]...)]

AS

subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ

ONLY];

OR REPLACE???????????? 如果視圖已存在,相當于修改視圖

FORCE | [NOFORCE]

無論基表是否存在都建立視圖 [只有基表存在能創(chuàng)建]

WITH CHECK OPTION

通過視圖執(zhí)行的INSERT和UPDATE操作不能創(chuàng)建該視圖檢索不到的數(shù)據(jù)行

WITH READ ONLY????? 禁止對視圖執(zhí)行DML操作

4、建立復(fù)雜的視圖

//不能通過修改視圖修改基表的數(shù)據(jù)

CREATE VIEW

dept_sum_vu

(dname,minsal,maxsal,avgsal)

AS SELECT

d.dname,MIN(e.sal),

MAX(sal),AVG(sal)

FROM emp e,dept d

WHERE

e.deptno=d.deptno

GROUP BY d.dname

/

數(shù)據(jù)來自多個表,查詢中使用了分組函數(shù)

5、WITH CHECK OPTION選項示例

CREATE OR REPLACE VIEW empvu20

AS SELECT *

FROM emp

WHERE

deptno=20

WITH CHECK OPTION CONSTRAINT empvu20_ck

/

查詢生成的視圖索引

select

constraint_name,constraint_type from user_constraints where

constraint_type='V'

/

通過視圖更新員工部門號

UPDATE empvu20

SET

deptno=10

WHERE empno=7902

/

UPDATE empvu20

*

ERROR at line

1:

ORA-01402: view WITH CHECK OPTION where-clause

violation

違反了約束,因為部門號更新為10后,該視圖不能再檢索到該行。

同樣,在該視圖上也不能insert非20號部門的員工。

6、TOP-N(利用內(nèi)聯(lián)視圖實現(xiàn))錯誤的???? (先得到3行,為這3行排序)

select

sal

from emp1

where rownum <= 3

order by sal desc

/

正確的

(先對所有數(shù)據(jù)排序,再取前三行)

select sal

from ( select sal from emp1 order by sal

desc)

where rownum < 4

/

7、視圖的DML操作含有如下情況,則不能刪除視圖中的數(shù)據(jù):

含有聚組函數(shù)

含有GROUP BY

子句

含有 DISTINCT 關(guān)鍵字

含有ROWNUM

這個偽列

含有如下情況,不能修改該視圖中的數(shù)據(jù):

上面提到的任何一種情況。

列是由表達式來進行定義的

含有如下情況,不能增加該視圖中的數(shù)據(jù):

上面提到的任何一種情況。

在基表中包含有

NOT NULL約束的列,然而該列并沒有在視圖中出現(xiàn)

原則:只要視圖中的數(shù)據(jù)不是來自基表的原始數(shù)據(jù),就不能對該數(shù)據(jù)做DML操作。

DML示例:建立視圖包含rownumcreate or replace view

e1_m_v

as

select ename, sal, hiredate from emp1

where

job='MANAGER'

and?? rownum < 3

/

對該視圖做DML操作

update e1_m_v set

sal=3000 where ename='BLAKE'

/

delete from e1_m_v where

ename='BLAKE'

/

ERROR at line 1:

ORA-01732: data manipulation operation

not legal on this view

總結(jié)

以上是生活随笔為你收集整理的oracle 视图使用rownum,Oracle数据对象--视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。