視圖(CREATEVIEW)--================================視圖:從表中抽出來的邏輯上相關的數據集合視圖其實就是一條查詢SQL語句,用于顯示一個或多個表或其它視圖中相關數據。視圖將查詢的結果作為一個表來使用,因此視圖可以被看作是存儲的查詢或一個虛擬表視圖來源于表,所有對視圖數據的修改最終都會被反映到視圖的基表中,這些修改必須服從基表的" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

SQL 基礎--> 視圖(CREATE VIEW)

系統 1938 0

--================================

-- SQL 基礎 --> 視圖 (CREATE VIEW)

--================================

?

視圖:

??? 從表中抽出來的邏輯上相關的數據集合

??? 視圖其實就是一條查詢 SQL 語句,用于顯示一個或多個表或其它視圖中相關數據。

??? 視圖將查詢的結果作為一個表來使用,因此視圖可以被看作是存儲的查詢或一個虛擬表

??? 視圖來源于表,所有對視圖數據的修改最終都會被反映到視圖的基表中,這些修改必須服從基表的完整性約束,并同樣會觸發定義

??? 在基表上的觸發器。 ( Oracle 支持在視圖上顯式的定義觸發器和定義一些邏輯約束)

?

使用視圖的好處:

??? 可把復雜的 SQL 語句簡單化

??? 可保證數據的安全性,限制對數據的訪問,因為它對表中的一些字段是隱藏的

??? 可使相同的數據以不同形式出現在不同的視圖中

?

視圖分類:

??? 簡單視圖

?????? 只從一個表中獲取數據

?????? 不包含函數

?????? 不包含分組數據

?????? 可通過該視圖進行 DML 操作

???

??? 復雜視圖

?????? 從多個表中獲取數據

?????? 包含函數

?????? 包含分組數據

?????? 不一定能通過視圖進行 DML 操作

???

創建視圖:

??? CREATE [OR REPLACE] FORCE NOFORCE VIEW view_name [alias [,alias] ... ]

??? AS subquery

??? [WITH CHECK OPTION]

??? [WITH READ ONLY]

?

??? OR REPLACE ???? 如果視圖存在,重建、修改這個視圖

??? FORCE ? ?????? 不管引用的表是否存在,都創建這個視圖

??? NOFORCE ??????? 只有當表存在的時候,才能創建這個視圖(默認方式)

??? WITH CHECK OPTION 只有子查詢能夠檢索出的行才能夠被插入 , 修改 , 或刪除。默認情況下對此不作檢查

???????????????????? 沒有指定約束名,系統會自動為約束命名,形式為 SYS_Cn

??? WITH READ ONLY ??? ??? 只讀 , 不可對視圖做 DML 操作

???

??? 需要注意的是,在子查詢中不能包含 ORDER BY , 子查詢可以是復雜的 SELECT 語句

?

?

修改視圖

? ?? 使用 CREATE OR REPLACE VIEW 子句修改視圖

???

刪除視圖:

??? DROP VIEW view_name

?

視圖中使用 DML 的規定:

??? 當視圖定義中含有以下元素之一不能使用 INSERT

??? 組函數

??? GROUP BY 、 ORDER BY

??? DISTINCT

??? ROWNUM

??? 列的定義為表達式

??? 表中非空的列,在視圖定義中未包括

?

??? 視圖定義含有以下元素不能使用 UPDATE

??? 組函數

??? GROUP BY ORDER BY

??? DISTINCT

??? ROWNUM

??? 列的定義為表達式

?

??? 視圖包含以下元素不能 DELETE

??? 組函數

??? GROUP BY 、 ORDER BY

??? DISTINCT

??? ROWNUM

?

?

與視圖有關的數據字典:

??? DBA _ VIEWS

??? USER_VIEWS

?

-- 演示創建視圖 ?

??? SQL > create or replace view vw_emp as

??? ? 2 ? select empno , ename , sal from emp where sal > 2500 ;

?

??? View created .

?

??? SQL > select * from vw_emp ;

?

?????? ? EMPNO ENAME ???????????? SAL

??? ---------- ---------- ----------

?????? ? 7566 JONES ??????????? 2975

?????? ? 7698 BLAKE ??????????? 2850

?????? ? 7788 SCOTT ??????????? 3000

?????? ? 7839 KING ???????????? 5000

?????? ? 7902 FORD ???????????? 3000

?

??? SQL > update vw_emp set sal = 3500 where ename = 'FORD' ; ? -- 可以更新并且直接修改了基表

?

??? 1 row updated .

?

??? SQL > select * from emp where ename = 'FORD' ;

?

?????? ? EMPNO ENAME ????? JOB ????????????? MGR HIREDATE ???????? SAL ?????? COMM ???? DEPTNO

??? ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

?????? ? 7902 FORD ?????? ANALYST ???????? 7566 03 - DEC - 81 ?????? 3500 ??????????????????? 20

?

??? SQL > insert into vw_emp select 9999 , 'Robinson' , 6000 from dual ; ? -- 可以插入并且直接修改了基表

?

??? 1 row created .

?

??? SQL > select * from emp where empno = 9999 ; ???????????????????

?

?????? ? EMPNO ENAME ????? JOB ????????????? MGR HIREDATE ????? ??? SAL ?????? COMM ???? DEPTNO

??? ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

?????? ? 9999 Robinson ??????????????????????????????????????? 6000

??? ?

??? 1 rows selected .

?

??? SQL > delete from emp where ename = 'Robinson' ; -- 可以刪除并且直接修改了基表

?

??? 1 row deleted .

?

??? SQL > select * from vw_emp ;

?

?????? ? EMPNO ENAME ???????????? SAL

??? ---------- ---------- ----------

?????? ? 7566 JONES ??????????? 2975

?????? ? 7698 BLAKE ??????????? 2850

?????? ? 7788 SCOTT ??????????? 3000

?????? ? 7839 KING ???????????? 5000

?????? ? 7902 FORD ???????????? 3500

?

??? SQL > rollback ;

?

??? Rollback complete .

?

?

-- 使用 with check option

??? -- 使用 WITH CHECK OPTION 子句確保 DML 只能在特定的范圍內執行,任何違反

??? --WITH CHECK OPTION 約束的請求都會失敗

???

??? SQL > create or replace view vw_emp ????????????????????

??? ? 2 ? as

??? ? 3 ? select empno , ename , sal from emp where sal ? > 2500

??? ? 4 ? with check option ;

?

??? View created .

?

??? SQL > insert into vw_emp select 9999 , 'Robinson' , 2000 from dual ; ? -- 不滿足條件 sal > 2500 不可插入

??? insert into vw_emp select 9999 , 'Robinson' , 2000 from dual

????????????? *

??? ERROR at line 1 :

??? ORA - 01402 : view WITH CHECK OPTION where - clause violation

?

?

??? SQL > select * from vw_emp ;

?

?????? ? EMPNO ENAME ???????????? SAL

??? ---------- ---------- ----------

?????? ? 7566 JONES ??????????? 2975

?????? ? 7698 BLAKE ??????????? 2850

?????? ? 7788 SCOTT ??????????? 3000

?????? ? 7839 KING ???????????? 5000

?????? ? 7902 FORD ???????????? 3000

?

??? SQL > delete from vw_emp where empno = 7902 ; ???? -- 滿足條件 sal > 2500 可以刪除 , 并且修改了基表

?

??? 1 row deleted .

?

??? SQL > select * from vw_emp ;

?

?????? ? EMPNO ENAME ???????????? SAL

??? ---------- ---------- ----------

?????? ? 7566 JONES ??????????? 2975

?????? ? 7698 BLAKE ??????????? 2850

?????? ? 7788 SCOTT ??????????? 3000

?????? ? 7839 KING ???????????? 5000

?

??? SQL > select ? * from emp ;

?

?????? ? EMPNO ENAME ????? JOB ????????????? MGR HIREDATE ???????? SAL ?????? COMM ???? DEPTNO

??? ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

?????? ? 7369 SMITH ????? CLERK ?????????? 7902 17 - DEC - 80 ??????? 800 ??????????????????? 20

?????? ? 7499 ALLEN ????? SALESMAN ??????? 7698 20 - FEB - 81 ?????? 1600 ??????? 300 ???????? 30

?????? ? 7521 WARD ?????? SALESMAN ??????? 7698 22 - FEB - 81 ?????? 1250 ??????? 500 ???????? 30

?????? ? 7566 JONES ????? MANAGER ???????? 7839 02 - APR - 81 ?????? 2975 ??????????????????? 20

?????? ? 7654 MARTIN ???? SALESMAN ??????? 7698 28 - SEP - 81 ?????? 1250 ?????? 1400 ???????? 30

?????? ? 7698 BLAKE ????? MANAGER ???????? 7839 01 - MAY - 81 ?????? 2850 ??????????????????? 30

?????? ? 7782 CLARK ????? MANAGER ???????? 7839 09 - JUN - 81 ?????? 2450 ??????????????????? 10

?????? ? 7788 SCOTT ????? ANALYST ???????? 7566 19 - APR - 87 ?????? 3000 ??????????????????? 20

?????? ? 7839 KING ?????? PRESIDENT ??????????? 17 - NOV - 81 ?????? 5000 ??????????????????? 10

?????? ? 7844 TURNER ???? SALESMAN ??????? 7698 08 - SEP - 81 ?????? 1500 ????????? 0 ???????? 30

?????? ? 7876 ADAMS ????? CLERK ?????????? 7788 23 - MAY - 87 ?????? 1100 ??????????????????? 20

?

?????? ? EMPNO ENAME ????? JOB ????????????? MGR HIREDATE ???????? SAL ?????? COMM ???? DEPTNO

??? ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

?????? ? 7900 JAMES ????? CLERK ?????????? 7698 03 - DEC - 81 ??????? 950 ??????????????????? 30

?????? ? 7934 MILLER ???? CLERK ?????????? 7782 23 - JAN - 82 ?????? 1300 ??????????????????? 10

?

??? 13 rows selected .

?

??? SQL > rollback ;

?

??? Rollback complete .

?

??? SQL > select * from vw_emp ;

?

?????? ? EMPNO ENAME ???????????? SAL

??? ---------- ---------- ----------

?????? ? 7566 JONES ?????????? ? 2975

?????? ? 7698 BLAKE ??????????? 2850

?????? ? 7788 SCOTT ??????????? 3000

?????? ? 7839 KING ???????????? 5000

?????? ? 7902 FORD ???????????? 3000

?

??? SQL > update vw_emp set sal = 2000 where empno = 7499 ; ?? -- 不滿足條件 , 不能更新

?

??? 0 rows updated .

?

--WITH READ ONLY 屏蔽 DML 操作

??? -- 可以使用 WITH READ ONLY 選項屏蔽對視圖的 DML 操作

??? -- 任何 DML 操作都會返回一個 Oracle server 錯誤

?

??? SQL > create or replace view vw_emp

??? ? 2 ? as

??? ? 3 ? select empno , ename , sal from emp where sal > 2500

??? ? 4 ? with read only ;

?

??? View created .

?

??? SQL > insert into vw_emp select 9901 , 'Robinson' , 3000 from dual ;

??? insert into vw_emp select 9901 , 'Robinson' , 3000 from dual

??? *

??? ERROR at line 1 :

??? ORA - 01733 : virtual column not allowed here

?

?

??? SQL > select * from vw_emp ;

?

?????? ? EMPNO ENAME ???????????? SAL

??? ---------- ---------- ----------

?????? ? 7566 JONES ??????????? 2975

?????? ? 7698 BLAKE ??????????? 2850

?????? ? 7788 SCOTT ??????????? 3000

?????? ? 7839 KING ???????????? 5000

?????? ? 7902 FORD ???????????? 3000

?

??? SQL > update vw_emp set sal = 8000 where empno = 7902 ;

??? update vw_emp set sal = 8000 where empno = 7902

????????????????? ? *

??? ERROR at line 1 :

??? ORA - 01733 : virtual column not allowed here

?

?

??? SQL > delete from vw_emp where empno = 7566 ;

??? delete from vw_emp where empno = 7566

????????????? *

??? ERROR at line 1 :

??? ORA - 01752 : cannot delete from view without exactly one key - preserved table

??? ?

??? -- 創建復雜視圖

??? SQL > create view vw_sum_emp ( name , minsal , maxsal , avgsal )

??? ? 2 ? as

??? ? 3 ? select dname , min ( e . sal ), max ( e . sal ), avg ( e . sal )

??? ? 4 ? from emp e

??? ? 5 ??? join dept d

??? ? 6 ????? on e . deptno = d . deptno

??? ? 7 ? group by dname ;

?

??? View created .

?

??? SQL > select * from vw_sum_emp ;

?

??? NAME ?????????????? MINSAL ???? MAXSAL ???? AVGSAL

??? -------------- ---------- ---------- ----------

??? ACCOUNTING ?????????? 1300 ?????? 5000 2916.66667

??? RESEARCH ????????????? 800 ?????? 3000 ?????? 2175

??? SALES ???????????????? 950 ?????? 2850 1566.66667

?

-- 查詢與視圖有關的數據字典

??? SQL > select view_name , text from user_views ;

?

??? VIEW_NAME ????????????????????? TEXT

??? ------------------------------ --------------------------------------------------------------------------------

??? VW_SUM_EMP ???????????????? ???? select dname , min ( e . sal ), max ( e . sal ), avg ( e . sal )

??????????????????????????? ?? from emp e

??????????????????????????????? ? join dept d

??????????????????????????????? ?? on e . deptno = d . deptno

??????????????????????????? ?? group by dname

?

??? VW_EMP ???????????????????????? select empno , ename , sal from emp where sal > 2500

??????????????????????????? ?? with read only

?

更詳細的創建視圖的語法:

??? http :// download . oracle . com / docs / cd / B19306_01 / server .102 / b14200 / statements_8004 . htm#SQLRF01504

???

更多參考:

???

Oracle 數據庫實例啟動關閉過程

?

Oracle 10g SGA 的自動化管理

?

使用 OEM,SQL*Plus,iSQL*Plus 管理 Oracle 實例

?

Oracle 實例和 Oracle 數據庫 (Oracle 體系結構 )

?

SQL 基礎 --> 常用函數

?

SQL 基礎 --> 過濾和排序

?

SQL 基礎 -->SELECT 查詢

?

SQL 基礎--> 視圖(CREATE VIEW)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人激情视频在线观看 | 欧美另类69xxx | av电影网站在线观看 | 亚洲免费精品 | 久久久久久久一区二区三区 | 亚洲免费一区 | 欧美精彩视频 | 日韩在线欧美 | 日韩精品亚洲一级在线观看 | 4hu四虎永久免在线视看 | 小明永久成人一区二区 | 久久成人国产精品免费 | 精品久久久久久久人人人人传媒 | 亚洲午夜剧场 | 欧美精品导航 | 国产精品久久久久久久久免费相片 | 99久久久精品国产一区二区 | 国产成人18黄网站免费 | 国产黄在线观看免费观看软件视频 | 亚洲电影在线观看 | 一级特黄视频 | 一级在线免费视频 | 日本在线视频观看 | 天天插天天射天天操 | 婷婷涩五月| 久久黄视频 | 岛国毛片一级一级特级毛片 | 精品久久久久久久久久久久久久 | 久久久久久久av | 日韩手机专区 | 天堂在线亚洲 | 日韩在线不卡 | 色呦呦在线免费观看 | 性欧美久久 | 久草中文在线 | 色综合综合色 | 成人av一区二区三区 | 中文字幕 国产精品 | 丁香婷婷六月天 | wwwxxx日本在线观看 | 成年网站在线观看 |