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
选项取代了现有视图的定义。如果已授予该视图的各种权限,则非常方便。因为当使用DROP VIEW和CREATE VIEW来更改视图的定义时,Oracle会删除视图特权,这可能不是您想要的。 为了避免这种情况,可以使用保留视图特权的CREATE OR REPLACE子句。
FORCE
通常,基于现有的表创建一个新的视图。 但是,有时可能希望根据稍后创建的表创建视图,或者在创建视图时没有足够的权限访问表。在这些情况下,可以使用FORCE选项。
column_aliases
从定义查询的选择列表派生的视图的列名称。 但是,定义查询的列名可能包含不能用于视图定义的函数或表达式。
要解决这个问题,有两个选择:
使用符合定义查询的SELECT子句中的命名规则的列别名。
为CREATE VIEW和AS子句之间的视图列显式指定列别名。
WITH READ ONLY
子句防止底层表通过视图进行更改。
WITH CHECK OPTION
句保护视图免受对基础表的任何更改,这些更改将生成未包含在定义查询中的行。
创建一个视图的例子
Create or REPLACE view detectingView
(name_vehicle,minsal,maxsal,avgsal)
as
select a.VEHICLE_NO,a.ATMO_HUMIDITY,a.AXLE_AMOUNT,a.ATMO_PRESSURE from info_detect_base a;
创建了一个简单的试图,只查询一个表
CREATE OR REPLACE VIEW DETETCT_POWER_info_vehicle
AS
select * from info_detect_base a where a.DETECT_SN in
(
select DETECT_SN from info_detect_record
);
创建一个 复杂试图,查询两张表
CREATE OR REPLACE VIEW customer_credits(
customer_id,
name,
credit
) AS
SELECT
customer_id,
name,
credit_limit
FROM
customers WITH READ ONLY;
创建一个只读视图
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;
连接视图是其定义查询包含连接(例如,内连接或左连接)的视图。 以下语句创建一个名为backlog的视图,其定义查询包含连接三个表的联接子句:orders,order_items和products。三个表之间的关系如下所示 -
视图的优点:
1.安全:根据个人的权限只允许看到某几个字段
2.隐藏数据的复杂性
3.简化用户的SQL命令
4.将引用程序与基表的修改隔离
注意:
1.视图不能包含伪列(currval,nextval,rownum)
2.视图中如果包含连接,集合分组等函数不能删除更新插入只能查询(常见视图都是用于查询了,基本上不会出现更改)
3.基表和视图的数据是绑定的
4.视图中可以使用分组函数
标签:创建,CREATE,视图,REPLACE,Oracle,查询,VIEW
来源: https://blog.youkuaiyun.com/yuzhao优快云YY/article/details/102746638