溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用

發(fā)布時(shí)間:2021-11-25 09:49:02 來(lái)源:億速云 閱讀:196 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要介紹了Oracle中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

-  常見(jiàn)的數(shù)據(jù)庫(kù)對(duì)象:

對(duì)象描述
基本的數(shù)據(jù)存儲(chǔ)集合,由行和列組成
視圖從表中抽取的邏輯上相關(guān)的數(shù)據(jù)集合
序列提供有規(guī)律的數(shù)值
索引提高查詢的效率
同義詞給對(duì)象起的別名

1、Oracle的視圖介紹和創(chuàng)建

a、什么是視圖?

  • 視圖是一個(gè)虛擬的表,視圖建立在已有表的基本上,視圖賴以建立的這些表稱之為基表。

  • 向視圖提供數(shù)據(jù)內(nèi)容的語(yǔ)句稱之為SELECT語(yǔ)句。

    b、為什么要使用視圖?

  • 主要出于兩個(gè)原因:

  • 1、安全原因,限制數(shù)據(jù)訪問(wèn);2、視圖可使復(fù)雜的查詢易于理解和使用。

    c、視圖的分類

  • 視圖分為簡(jiǎn)單視圖、復(fù)雜視圖、連接視圖、只讀視圖:
    1、簡(jiǎn)單視圖只從單表里獲取數(shù)據(jù);不包含函數(shù)和數(shù)據(jù)組。
    2、復(fù)雜視圖從多表獲取數(shù)據(jù);包含函數(shù)和數(shù)據(jù)組。
    3、連接視圖是指基于多個(gè)表建立的視圖,使用連接視圖能夠簡(jiǎn)化連接查詢。
    4、只讀視圖只允許使用select語(yǔ)句,不允許其他DML語(yǔ)句的操作。

  • 附加說(shuō)明:DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來(lái)對(duì)數(shù)據(jù)庫(kù)里的數(shù)據(jù)進(jìn)行操作的語(yǔ)言。

    d、如何創(chuàng)建視圖?

  • 創(chuàng)建視圖的語(yǔ)法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];

  • 需要注意的是,Oracle數(shù)據(jù)庫(kù)用戶必須具有CREATRE VIEW權(quán)限才能夠創(chuàng)建視圖。

  • 簡(jiǎn)單視圖的創(chuàng)建示例:

  • 建立用于查詢員工號(hào)、姓名、工資的視圖。

    SQL> conn sys/02000059 as sysdba;
    已連接。
    SQL> grant create view to scott;
    授權(quán)成功。
    SQL> conn scott/02000059
    已連接。
    SQL> create VIEW emp_view AS select empno, ename, sal FROM emp;
    視圖已創(chuàng)建。
    • 視圖是一張?zhí)摂M的表,和表一樣,可以通過(guò)SELECT語(yǔ)句進(jìn)行查詢。

      SQL> select * from emp_view;
               EMPNO ENAME             SAL
                  7951 EASON            3000
                  7369 G_EASON           800
                  7499 ALLEN            1600
                  ......
                  7900 JAMES             950
                  7902 FORD             3000
                  7934 MILLER           1300
      已選擇15行。
  • 在創(chuàng)建視圖時(shí)可以修改列的名稱。

        SQL> create VIEW emp_view2(員工號(hào), 員工名,工資) AS select empno, ename, sal FROM emp;
        視圖已創(chuàng)建。
        SQL> select * from emp_view2;
                員工號(hào) 員工名           工資
                    7951 EASON            3000
                    7369 G_EASON           800
                    7499 ALLEN            1600
                    7521 WARD             1250
                    ......
                    7876 ADAMS            1100
                    7900 JAMES             950
                    7902 FORD             3000
                    7934 MILLER           1300
        已選擇15行。

  • 創(chuàng)建連接視圖示例:

  • 建立用于獲取部門(mén)號(hào)為10的部門(mén)號(hào)、部門(mén)名稱以及員工信息。

    SQL> CREATE VIEW dept_emp_view AS SELECT d.deptno, d.dname, e.empno, e.ename, e.job FROM dept d, emp e WHERE d.deptno = e.deptno AND d.deptno = 10;
    視圖已創(chuàng)建。
        SQL> select * from dept_emp_view;
                        DEPTNO DNAME           EMPNO ENAME      JOB
                        10 ACCOUNTING           7782 CLARK      MANAGER
                        10 ACCOUNTING           7839 KING       PRESIDENT
                        10 ACCOUNTING           7934 MILLER     CLERK

  • 只讀視圖示例:建立查看10號(hào)部門(mén)員工信息的視圖。

    SQL> CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only;
    視圖已創(chuàng)建。
    SQL> update emp_view3 set sal = sal + 50;
    update emp_view3 set sal = sal + 50
    第 1 行出現(xiàn)錯(cuò)誤:
    ORA-42399: 無(wú)法對(duì)只讀視圖執(zhí)行 DML 操作

    2、Oracle視圖的查詢修改與刪除

    a、視圖上的DML操作

  • 查詢視圖-select,如:select * from emp_view;

  • 添加數(shù)據(jù)-insert,如:insert into empnew_view(empno, ename, sal) values(8888, 'LAYNA', 6666);

  • 修改數(shù)據(jù)-update,如:update emp_view set sal = sal + 100 where empno = 8888;

  • 刪除數(shù)據(jù)-delete,如:delete from emp_view where empno = 8888;

  • 注意:針對(duì)視圖的更新操作(insert、update、delete)實(shí)際上改變的是基表中的數(shù)據(jù)。

    b、在創(chuàng)建視圖時(shí)定義check約束

  • WITH CHECK OPTION選項(xiàng)用于在視圖上定義CHECK約束

  • 示例:CHREATE VIEW emp_view4 AS SELECT * FROM emp_view WHERE deptno = 20 WITH CHECK OPTION chk_view;

    SQL> create view dept_emp_view2 as select * from dept_emp_view where deptno = 10 with check option constraint ck_view;
    視圖已創(chuàng)建。
    SQL> select * from dept_emp_view2;
            DEPTNO DNAME               EMPNO ENAME      JOB
                    10 ACCOUNTING           7782 CLARK      MANAGER
                    10 ACCOUNTING           7839 KING       PRESIDENT
                    10 ACCOUNTING           7934 MILLER     CLERK
    SQL> update dept_emp_view set deptno = 20 where empno = 7782;
    update dept_emp_view set deptno = 20 where empno = 7782
    第 1 行出現(xiàn)錯(cuò)誤:
    ORA-01779: 無(wú)法修改與非鍵值保存表對(duì)應(yīng)的列
  • check約束的作用是在添加或者修改數(shù)據(jù)時(shí)數(shù)據(jù)必須滿足with check option前的where子句的條件。如上例:修改和添加數(shù)據(jù)時(shí)deptno 的值必須為10。

    c、修改視圖

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

  • 示例:CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';

    SQL> CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';
    視圖已創(chuàng)建。

    d、刪除視圖

  • 當(dāng)視圖不再需要時(shí),用戶可以執(zhí)行DROP view語(yǔ)句刪除視圖。(不會(huì)刪除基表)

    SQL> DROP VIEW emp_view;
    視圖已刪除。
    SQL> select * from emp_view;
    select * from emp_view
    第 1 行出現(xiàn)錯(cuò)誤:
    ORA-00942: 表或視圖不存在

    3、Oracle的復(fù)雜視圖

    a、什么是復(fù)雜視圖?

  • 復(fù)雜視圖是指包含函數(shù)、表達(dá)式或者分組數(shù)據(jù)的視圖,它主要用于執(zhí)行查詢操作。

  • 注意:當(dāng)定義復(fù)雜視圖時(shí),必須要為函數(shù)或者表達(dá)式定義列的別名。

    b、創(chuàng)建復(fù)雜視圖

  • 示例:創(chuàng)建用于獲得每個(gè)崗位平均工資、工資總和、最高工資和最低工資的視圖。

    SQL> create VIEW job_view(job, avgsal, sumsal, maxsal, minsal) AS SELECT job, avg(sal), sum(sal), max(sal), min(sal) FROM emp GROUP BY job;
    視圖已創(chuàng)建。
    SQL> select * from job_view;
    JOB           AVGSAL     SUMSAL     MAXSAL     MINSAL
    CLERK         1037.5       4150       1300        800
    SALESMAN        1400       5600       1600       1250
    PRESIDENT       5000       5000       5000       5000
    MANAGER   2758.33333       8275       2975       2450
    ANALYST         3000       9000       3000       3000

    c、復(fù)雜視圖上執(zhí)行DML操作的原則

  • DELETE操作原則,視圖中包含以下元素之一不能執(zhí)行delete操作:

  • group by子句、分組函數(shù)、distinct關(guān)鍵字、rownum偽列。

  • UPDATE操作原則,視圖中包含以下元素之一不能執(zhí)行update操作:

  • group by子句、分組函數(shù)、dinstinct關(guān)鍵字、rownum偽列、使用表達(dá)式定義的列。

  • INSERT操作原則,視圖中包含以下元素之一不能執(zhí)行insert操作:

  • group by子句、分組函數(shù)、dinstinct關(guān)鍵字、rownum偽列、使用表達(dá)式定義的列、視圖上沒(méi)有包含基表的NOT NULL列。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Oracle中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI