Oracle創建視圖

在本教學中,您將學習如何使用Oracle CREATE VIEW語句在資料庫中創建新視圖。

Oracle CREATE VIEW語法

要在資料庫中創建新視圖,請使用以下Oracle CREATE VIEW語句:

CREATE [OR REPLACE] VIEW view_name [(column_aliases)] AS
    defining-query
[WITH READ ONLY]
[WITH CHECK OPTION]

下麵來看看各個參數的說明 -

  • OR REPLACE - OR REPLACE選項取代了現有視圖的定義。如果已授予該視圖的各種許可權,則非常方便。因為當使用DROP VIEWCREATE VIEW來更改視圖的定義時,Oracle會刪除視圖特權,這可能不是您想要的。 為了避免這種情況,可以使用保留視圖特權的CREATE OR REPLACE子句。

  • FORCE - 通常,基於現有的表創建一個新的視圖。 但是,有時可能希望根據稍後創建的表創建視圖,或者在創建視圖時沒有足夠的許可權訪問表。在這些情況下,可以使用FORCE選項。

  • column_aliases - 通常,從定義查詢的選擇列表派生的視圖的列名稱。 但是,定義查詢的列名可能包含不能用於視圖定義的函數或運算式。
    要解決這個問題,有兩個選擇:

    • 使用符合定義查詢的SELECT子句中的命名規則的列別名。
    • CREATE VIEWAS子句之間的視圖列顯式指定列別名。
  • AS defining-query - 定義的查詢是一個SELECT語句,它定義了視圖的列和行。

  • WITH READ ONLY - WITH READ ONLY子句防止底層表通過視圖進行更改。
  • WITH CHECK OPTION - WITH CHECK OPTION子句保護視圖免受對基礎表的任何更改,這些更改將生成未包含在定義查詢中的行。

Oracle CREATE VIEW示例

我們來看一些基於示例資料庫中的表創建新視圖的示例。

1. 創建一個視圖的例子

請參閱示例資料庫中的以下employees表 -

以下語句根據employees表創建一個名為employee_yos的視圖。 該視圖顯示了員工ID,姓名和服務年限:

CREATE VIEW employee_yos AS
SELECT
    employee_id,
    first_name || ' ' || last_name full_name,
    FLOOR( months_between( CURRENT_DATE, hire_date )/ 12 ) yos
FROM
    employees;

在這個例子中,沒有定義視圖的列名,因為定義的查詢使用列別名來表達,比如full_name列為:first_name || ' ' || last_nameyos列為: FLOOR( months_between( CURRENT_DATE, hire_date )/ 12 )

如果您不想在查詢中使用列別名,則必須在CREATE VIEW 子句中定義它們:

CREATE VIEW employee_yos (employee_id, full_name, yos) AS
SELECT
    employee_id,
    first_name || ' ' || last_name,
    FLOOR( months_between( CURRENT_DATE, hire_date )/ 12 )
FROM
    employees;

以下查詢返回服務年數為15的員工:

SELECT
    *
FROM
    employee_yos
WHERE
    yos = 15
ORDER BY
    full_name;

執行上面查詢語句,得到以下結果 -

2. 創建只讀視圖示例

考慮以下customers表,結構如下:

創建只讀視圖示例

以下示例將創建一個名為customer_credits的只讀視圖,該視圖基於customers表。 該視圖包含三列:customer_idnamecredit

CREATE OR REPLACE VIEW customer_credits(
        customer_id,
        name,
        credit
    ) AS
SELECT
        customer_id,
        name,
        credit_limit
    FROM
        customers WITH READ ONLY;

3. 創建連接視圖示例

連接視圖是其定義查詢包含連接(例如,內連接或左連接)的視圖。 以下語句創建一個名為backlog的視圖,其定義查詢包含連接三個表的聯接子句:ordersorder_itemsproducts。三個表之間的關係如下所示 -

創建連接視圖示例3

參考以下語句 -

CREATE OR REPLACE VIEW backlogs AS
SELECT
    product_name,
    EXTRACT(
        YEAR
    FROM
        order_date
    ) YEAR,
    SUM( quantity * unit_price ) amount
FROM
    orders
INNER JOIN order_items
        USING(order_id)
INNER JOIN products
        USING(product_id)
WHERE
    status = 'Pending'
GROUP BY
    EXTRACT(
        YEAR
    FROM
        order_date
    ),
    product_name;

在本教學中,您已學習如何使用Oracle CREATE VIEW語句在資料庫中創建新視圖。


上一篇: Oracle檢查約束 下一篇: Oracle過程