<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
    Oracle視圖管理
    ?
    ??? 很久沒有繼續(xù)學(xué)習(xí)DBA的內(nèi)容了,因?yàn)檫@中間實(shí)在是忙得焦頭爛額啊。最近雖然還是很忙,但是想是想把這一塊盡早結(jié)束掉。所以打算先把別的放一放,抓緊時(shí)間學(xué)習(xí)一下這部分內(nèi)容。今天的內(nèi)容比較簡(jiǎn)單,是關(guān)于View的管理,這是最常用的操作,記錄一下,僅為完整性。
    ?
    ?
    一、視圖的創(chuàng)建規(guī)則
    ?
    ??? 這里需要注意的一點(diǎn)就是:初始創(chuàng)建用戶如果只是賦予了resource權(quán)限的話,那只能默認(rèn)可以創(chuàng)建table、function、procedure、package等等,但是不包括創(chuàng)建view的權(quán)限,如果需要?jiǎng)?chuàng)建view權(quán)限,需要專門賦權(quán)“CREATE VIEW”或者“CREATE ANY VIEW”權(quán)限。
    ?
    ??? 另外需要說明的一點(diǎn)是:視圖的操作權(quán)限取決于創(chuàng)建視圖的user對(duì)視圖中涉及的table的操作權(quán)限大小。例如用戶A創(chuàng)建的關(guān)于TABLE_A的視圖VIEW_A,而A對(duì)于TABLE_A有select、insert的權(quán)限,則如果將這個(gè)VIEW_A的select、insert權(quán)限賦予用戶B,那么用戶B也將可以對(duì)VIEW_A進(jìn)行select和insert,而無須擁有與TABLE_A操作的權(quán)限。同樣,即便B擁有了對(duì)VIEW_A所有的操作權(quán)限,也不能對(duì)VIEW_A進(jìn)行update等操作。
    ?
    1、創(chuàng)建一個(gè)簡(jiǎn)單的view
    ?
    create view sales_staff as
    select empno, ename, deptno
    ? from emp
    where deptno = 10
    with check option constraint sales_staff_cnst; --此句用于創(chuàng)建帶有約束的view
    ?
    注意一點(diǎn):既然是對(duì)deptno=10的視圖,不能對(duì)任何view無法查詢到的記錄進(jìn)行修改。
    例如insert into sales_staff values(7654, 'AAA', 30); 是會(huì)報(bào)錯(cuò)的。
    ?
    2、Oracle后臺(tái)的*展開
    ?
    ??? Oracle在創(chuàng)建view時(shí),會(huì)將頂層視圖查詢中的所有通配符(*)展開成列,形成的查詢被存儲(chǔ)在數(shù)據(jù)字典中。而且會(huì)存儲(chǔ)相應(yīng)字段名的完整大些名稱,如下例所示:
    ?
    create view dept as select * from scott.dept;
    -->
    create "DEPTNO", "DNAME", "LOC" FROM scott.dept;
    ?
    3、帶錯(cuò)誤創(chuàng)建view
    ?
    ??? 如果要先創(chuàng)建view,后創(chuàng)建table(這種情況還是有實(shí)際意義的),那么就需要是喲個(gè)“帶錯(cuò)誤創(chuàng)建視圖”的功能。這樣,當(dāng)創(chuàng)建視圖時(shí),涉及到不存在的表或現(xiàn)存表中的無效的列,或者當(dāng)視圖的擁有者不具備所需的權(quán)限時(shí),還是能創(chuàng)建視圖并輸入到數(shù)據(jù)字典。當(dāng)然這種視圖是不能使用的。
    ?
    ??? 創(chuàng)建的語法是:
    ?
    ??? CREATE FORCE VIEW AS ...
    ?
    ?
    二、視圖數(shù)據(jù)的更改
    ?
    ??? 關(guān)于視圖是否可更改,影響的條件有很多,具體的可以參看我以前的文章《關(guān)于Views的Updatable問題》,里面有詳細(xì)的論述。但是Oracle是很人性化的軟件,所以我們不需要記那么復(fù)雜的東西,我們要查看某個(gè)View時(shí)候可以更新,只需要查詢USER_UPDATABLE_COLUMNS這個(gè)數(shù)據(jù)字典就可以搞定了。
    ?
    ??? 舉個(gè)簡(jiǎn)單的例子:
    ?
    SQL> create table test_a (a int,b int);
    ?
    Table created.

    SQL> create view test_view as select a,sum(b) b from test_a group by a;
    ?
    View created.
    SQL> select * from user_updatable_columns where lower(table_name)='test_view';
    ?
    OWNER??????? TABLE_NAME?? COLUMN UPDATA INSERT DELETA
    ------------ ------------ ------ ------ ------ ------
    WANGXIAOQI?? TEST_VIEW??? B????? NO???? NO???? NO
    WANGXIAOQI?? TEST_VIEW??? A????? NO???? NO???? NO
    ??? 可見,包含有匯總函數(shù)的view是無法做任何的更改的。
    ?
    ?
    三、視圖的其他操作
    ?
    ??? 視圖的其他操作也的都比較簡(jiǎn)單,所以都放在一起了解一下
    ?
    1、更改視圖
    ?
    ??? alter view語句只有一個(gè)功能,就是用來重新編譯視圖,即:
    ??? alter view view_name compile;
    ?
    2、刪除視圖
    ?
    ??? 啥也不說了
    ??? drop view view_name;
    ?
    3、替換視圖
    ?
    ??? 因?yàn)関iew不涉及任何的實(shí)際數(shù)據(jù)存儲(chǔ),所以可以直接drop后重建。當(dāng)然最合適的做法是 使用create or replace view來替換原有的view。
    ?
    ??? 需要注意的有:
    ??? ● 替換之后也更新了數(shù)據(jù)字典中的視圖定義
    ??? ● 所有依賴于此view的PLSQL、View會(huì)全部失效
    ?
    ?
    四、關(guān)于視圖的查看
    ?
    ??? DBA|ALL|USER_VIEWS:查看所有視圖的定義
    ??? DBA|ALL|USER_UPDATABLE_COLUMNS:查看所有字段是否可更新
    ???
    ??? 如果需要查看VIEW創(chuàng)建時(shí)的代碼,兩種方法:
    ?
    ??? 1、select text from user_views where view_name = 'VIEW_NAME';
    ?
    ??? 2、select dbms_metadata.get_ddl('VIEW','VIEW_NAME') from dual;
    ?
    ?
    ?
    ?
    ?
    ?
    ?
    posted on 2009-07-17 21:15 decode360 閱讀(832) 評(píng)論(0)  編輯  收藏 所屬分類: 08.DBA
    主站蜘蛛池模板: 亚洲色av性色在线观无码| 校园亚洲春色另类小说合集| 精品免费人成视频app | 亚洲国产日产无码精品| 永久黄网站色视频免费直播| 中文字幕免费播放| 亚洲av乱码一区二区三区香蕉| 午夜国产羞羞视频免费网站| 男的把j放进女人下面视频免费| 亚洲妇女熟BBW| 亚洲日韩精品一区二区三区无码| 日本三级2019在线观看免费| 无码AV动漫精品一区二区免费| 亚洲酒色1314狠狠做| heyzo亚洲精品日韩| 国产成人免费高清激情明星| 农村寡妇一级毛片免费看视频| 久久亚洲精品中文字幕| 亚洲女人被黑人巨大进入| 最新欧洲大片免费在线| 三年片免费高清版| 日韩欧美亚洲国产精品字幕久久久| 亚洲欧洲日韩不卡| 亚洲精品无码专区2| 无码视频免费一区二三区| 嫩草成人永久免费观看| 无码AV动漫精品一区二区免费 | 国产亚洲精品看片在线观看| 国产va精品免费观看| 免费的全黄一级录像带| 日本亚洲中午字幕乱码| 亚洲国产日韩在线成人蜜芽| 亚洲精品乱码久久久久久自慰| 国产美女无遮挡免费视频 | 成人免费无码大片a毛片软件 | 免费夜色污私人影院网站| 自拍日韩亚洲一区在线| 亚洲精品私拍国产福利在线| 亚洲午夜国产片在线观看| 久久久久久久久免费看无码 | 区三区激情福利综合中文字幕在线一区亚洲视频1|