Oracle视图

一、视图的概念

1.视图是一个虚拟表,视图并不在数据库中存储数据值,数据库中只在数据字典中存储对视图的定义。
2、创建视图的语句

  CREATE [OR REPLACE]VIEW  view_name
      [(column_name1[,column_name2…])]
       AS
            select_statement
        [WITH CHECK OPTION]
        [WITH READ ONLY]

3、参数说明

CREATE OR REPALCE:修改视图的定义,其实质是删除原视图并重建该视图,但是会保留该视图上授予的各种权限。如果Oracle数据库中并没有该视图,直接create就可以。
WITH CHECK OPTION :表示对视图的操作必须满足子查询中的约束条件。
WITH READ ONLY :用于创建只读视图

二.创建修改视图

1、创建简单视图

简单视图指基于单个表并且不包含函数或表达式的视图,在该视图上可以执行DML语句。
例1:创建视图V_emp,用于查询员工的员工编号、姓、名、电话

CREATE  VIEW V_emp
AS
SELECT Employee_ID ,Last_Name, First_Name , phone_number FROM Employees

查询创建的视图信息用数据字典user_views
例2:使用视图,请在视图V_emp中完成以下操作:
1)查询该视图所有信息。SELECT * FROM V_emp;
2)向该视图中插入记录:INSERT INTO V_emp values(employees_seq.nextval,’zhang’,’huan’,’123456’);

2、创建复杂视图

复杂视图指包含函数、表达式或者分组数据的视图,在该视图上执行DML语句时必须要符合特定条件。

注:在定义复杂视图时必须为函数或表达式定义别名
例3:创建视图V_orderdetail,用于查询每个产品的销售总数量和销售总金额

CREATE VIEW V_orderdetail
AS
SELECT ProductID , sum(quantity)   total_quantity, sum(quantity*unitprice)   total_price
FROM Orderdetails
GROUP BY ProductID

例4:使用视图V_orderdetail,查询产品编号为10的产品的销售总数量和销售总金额
实现语句:

SELECT *
FROM V_orderdetail
WHERE productid=10;

查询视图中的某个列是否允许进行更新操作需要查询数据字典User_updatable_columns

3、创建连接视图

连接视图指基于多个表建立的视图,一般来说不会在该视图上执行INSERT、UPDATE、DELETE操作。
例5:创建视图V_ord_ordetail,用于查询每个订单的订单编号、经销商编号、订购日期、订购的产品编号、产品名称、订购数量、订购单价。
实现的语句为:

CREATE  OR REPLACE VIEW V_ord_ordetail
AS
SELECT o.orderid,customerid,orderdate,p.productid,productname,quantity,od.unitprice
FROM orders o JOIN orderdetails od
ON o.orderid=od.orderid
JOIN products p ON od.productid=p.productid;

例6: 创建视图v_depart_empl,查询在“Sales”部门任职的员工的员工号、员工姓名、部门名称dname、职位名称job、工资sal和奖金信息

create view v_depart_empl

as

select empno,ename,sal,comm,dname,d.deptno from emp e join dept d on e.deptno=d.deptno;

4、创建只读视图

只读视图指只允许进行SELECT操作的视图,在创建该视图时指定WITH READ ONLY选项。
注:该视图上不能执行INSERT、UPDATE、DELETE操作。
例7:建立一个只读视图V_ord_prod,要求查询产品表中类别编号为2的产品编号、产品名称、产品单价,类别编号。
实现的语句为:

CREATE OR REPLACE  VIEW V_ord_prod
AS
SELECT productid,productname,unitprice,categoryid
FROM products WHERE categoryid=2
WITH READ ONLY

5、创建CHECK约束视图

WITH  CHECK OPTION用于在视图上定义CHECK约束,即在该视图上执行INSERT或UPDATE操作时,数据必须符合查询结果.
例8:建立一个带CHECK约束的视图V_check_prod,要求查询产品表中类别编号为2的产品编号、产品名称、产品单价,类别编号。
实现的语句为:

CREATE  VIEW v_check_prod (产品编号,产品名称,单价,类别)
AS
SELECT productid,productname,unitprice,categoryid
FROM products WHERE categoryid=2
WITH CHECK OPTION

查询该视图各列的可更新性:

select column_name,updatable,insertable,deletable from user_updatable_columns where table_name=' V_CHECK_PROD ‘

三. 删除视图

删除视图的语句格式:
DROP VIEW view_name;
例9:将视图t_view删除
实现语句:

  DROP VIEW t_view;
posted @ 2020-11-21 14:58  重雪  阅读(299)  评论(0编辑  收藏  举报