zoukankan      html  css  js  c++  java
  • oracle学习篇十一:视图

    视图是存储的查询定义。

    1. 创建视图的语法如下:
    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;

    2.创建带有错误的视图:使用FORCE选项
    在以下情况下,Oracle也会创建视图:
    1》视力定义的查询引用了一个不存在的表;
    2》视图定义的查询引用了现有表中无效的列;
    3》视图的所有者没有所需的权限。

    示例9:下面创建一个基于venmast的视图。但数据库中并不存在名为"venmast"的表。
    Create FORCE VIEW ven AS select * from venmast;
    如果稍后创建名为venmast的表,可以使用ALTER VIEW ven COMPILE;

    3. 联接视图:
    示例:演示如何创建联接视图
    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;

    4.删除视图语法:Drop VIEW view_name ;

  • 相关阅读:
    哈希表
    跳表
    哈夫曼之谜
    选择树、判定树和查找树

    将gbk字符串转换成utf-8,存储到注册表中后,再次从注册表读取转换成gbk,有问题!!!
    函数内部还是不要使用 strtok()
    没想到: System.out.println(n1 == f1 ? n1 : f1);
    在不同DPI屏幕环境下,让图标显示的尺寸保持不变,使用 LoadImage() 加载图标
    在多线程中显示模态窗口,出现异常现象
  • 原文地址:https://www.cnblogs.com/brant/p/5637874.html
Copyright © 2011-2022 走看看