oracle 视图使用rownum,Oracle数据对象--视图
1、為什么使用視圖(1)限制數據的存取:用戶只能看到基表的部分信息。
(2)使得復雜的查詢變得容易:視圖中的數據可能來自多個表。
(3)使得數據相對比較獨立:從項目開發的角度,模塊對應視圖,模塊包含多個表,模塊發生變化后只需修改相應的視圖,對應的表的結構無需修改。
(4)代表對同一數據的不同視角:不同部門的員工只能看到本部門的信息。
2、創建視圖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]
無論基表是否存在都建立視圖 [只有基表存在能創建]
WITH CHECK OPTION
通過視圖執行的INSERT和UPDATE操作不能創建該視圖檢索不到的數據行
WITH READ ONLY????? 禁止對視圖執行DML操作
4、建立復雜的視圖
//不能通過修改視圖修改基表的數據
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
/
數據來自多個表,查詢中使用了分組函數
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(利用內聯視圖實現)錯誤的???? (先得到3行,為這3行排序)
select
sal
from emp1
where rownum <= 3
order by sal desc
/
正確的
(先對所有數據排序,再取前三行)
select sal
from ( select sal from emp1 order by sal
desc)
where rownum < 4
/
7、視圖的DML操作含有如下情況,則不能刪除視圖中的數據:
含有聚組函數
含有GROUP BY
子句
含有 DISTINCT 關鍵字
含有ROWNUM
這個偽列
含有如下情況,不能修改該視圖中的數據:
上面提到的任何一種情況。
列是由表達式來進行定義的
含有如下情況,不能增加該視圖中的數據:
上面提到的任何一種情況。
在基表中包含有
NOT NULL約束的列,然而該列并沒有在視圖中出現
原則:只要視圖中的數據不是來自基表的原始數據,就不能對該數據做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
總結
以上是生活随笔為你收集整理的oracle 视图使用rownum,Oracle数据对象--视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 入参含多个值,oracle
- 下一篇: oracle11g迁移到12cpdb,1