视图总结

来源:互联网 发布:大数据公司被收购 编辑:程序博客网 时间:2024/06/08 19:10

视图是存储的查询定义。

   创建视图的语法如下:


   Create [OR REPLACE] [FORCE | NOFORCE] VIEW view_name[(alias,alias,...)] AS


   select_statement [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY];


   其中:OR REPLACE表示在该视图存在的话,将重新创建该视图。


         FORCE使用此关键字,则无论基表是否存在,都将创建视图。


         NOFORCE这是默认值。如果使用此关键字,则仅当基表存在时才创建视图。


         view_name表示要创建视图的名称。


         alias指定在视图里面列的名字,名字数目必须与视图所选择的表达式的数目相匹配。


         select_statement表示Select语句。


         WITH CHECK OPTION此选项指定只能插入或更新视图可以访问的行。术语constraint表示为CHECK OPTION约束指定的名称。


         WITH READ ONLY此选项确保不能在此视图上执行任何修改操作。


   示例7:演示创建一个名为ven_view的视图,该视图与vendor_master表具有相同的结构。


         Create VIEW ven_view AS select * from vendor_master;




   视图中的ORDER BY子句:以便在查询视图时即使不使用Order By子句,结果集也会按指定的顺序排列行。


   示例8:Create OR REPLACE VIEW ven_view(编号,日期) AS select orderno,odate from vendor_master order by venname;


  


   创建带有错误的视图:使用FORCE选项


   在以下情况下,Oracle也会创建视图:


   视力定义的查询引用了一个不存在的表;视图定义的查询引用了现有表中无效的列;视图的所有者没有所需的权限。


   示例9:下面创建一个基于venmast的视图。但数据库中并不存在名为"venmast"的表。


   Create FORCE VIEW ven AS select * from venmast;


   如果稍后创建名为venmast的表,可以使用ALTER VIEW ven COMPILE;


  


   联接视图:


   示例:演示如何创建联接视图


   Create OR REPLACE VIEW ven_ord_view AS select vm.vencode,venname,orderno,odate,ostatus


   from vendor_master vm,order_master om where vm.vencode=om.vencode;




   键保留表:在联接视图中,如果视图包含了一个表的主键,并且也是这个视图的主键,则这个键被保留,则这个表被称为键保留表。


   ven_ord_view视图以vendor_master和order_master这两个表为基表。order_master表被视为键保留表,因为orderno既是order_master表


   的主键,也是视图的主键。而vendor_master表不被视为键保留表,因为vendor_master表的主键vencode是联接字段,不是视图的主键。


   示例10:此示例成功修改了记录,因为odate列属于键保留表order_master。对于非键保留表vendor_master的venname列的更新则是不允许的。


   update wen_ord_view odate=odate+1 where vencode='V003';    注意:运行此示例时,必须确保基表的主键已正确创建。




   可以查询字典视图User_Updateble_Columns来查看联接视图中可更新的列。


   可以查询字典视图User_Views来查看用户所创建的视图信息。




   视图中的函数:视图可以使用单行函数(由数字、字符、日期组成)、分组函数和表达式。


   示例11:此示例用UPPER函数创建视图,注意使用函数或表达式时,应赋予列一个别名。


   Create VIEW vendor_master_view AS select vencode,UPPER(venname) vendor_name from vendor_master;




   删除视图语法:Drop VIEW view_name ;
0 0