Oracle中创建视图

Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。

    视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。

    视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。

视图的优点:

      1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

      2.用户通过简单的查询可以从复杂查询中得到结果。

      3.维护数据的独立性,试图可从多个表检索数据。

      4.对于相同的数据可产生不同的视图。

视图分为简单视图和复杂视图:

      简单视图只从单表里获取数据
      复杂视图从多表
      简单视图不包含函数和数据组
      复杂视图包含

     简单视图可以实现DML操作
     复杂视图不可以.

视图的创建:

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

[(alias[, alias]...)]

AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]] 
[WITH READ ONLY] 
其中:
OR REPLACE    :若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE              :不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE         :只有基表都存在ORACLE才会创建该视图:
alias                   :为视图产生的列定义的别名;
subquery           :一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION :
                            插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :
                           该视图上不能进行任何DML操作。
例如:
       CREATE OR REPLACE VIEW dept_sum_vw
               (name,minsal,maxsal,avgsal)
       AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
       FROM    emp e,dept d
       WHERE e.deptno=d.deptno
       GROUP BY d.dname;
视图的定义原则:
       1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
       2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用
          ORDER BY 子句;
       3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
       4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象
          权限。
视图的查询:
          视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。
          还可以查询视图的全部信息和指定的数据行和列。
   如:
         检索数据:
          SQL>SELECT * FROM dept_sum_vw;
         查询视图定义:
         SELECT view_name,text from user_views;
            其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS
            得到相关信息。
修改视图:
        通过OR REPLACE 重新创建同名视图即可。
视图上的DML 操作:
        DML操作应遵循的原则:
        1.简单视图可以执行DML操作;
        2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能
           删除数据行;
        3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
            a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
            b.使用表达式定义的列;
            c.ROWNUM伪列。
            d.基表中未在视图中选择的其他列定义为非空且无默认值。
视图可用于保持数据库的完整性,但作用有限。
通过视图执行引用完整性约束可在数据库级执行约束。
WITH CHECK OPTION 子句限定:
         通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,
         因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
例如:
           CREATE OR REPLACE VIEW vw_emp20
           AS SELECT * FROM emp
           WHERE deptno=20
           WITH CHECK OPTION constraint vw_emp20_ck;
          视图 已建立。
            查询结果:
           SELECT empno,ename,job FROM vw_emp20;
           
          EMPNO                ENAME                JOB
---------------------           --------------          -------------
              7369                 SMITH                CLERK
              7566                 JONES               MANAGER
              7902                 FORD                ANALYST
          修改:
                UPDATE vw_emp20 
                SET        deptno=20
                WHERE   empno=7902;
           将产生错误:
               UPDATE vw_emp20 
                              *
               ERROR 位于第一行:
               ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句
视图的删除:
            DROP VIEW VIEW_NAME语句删除视图。
            删除视图的定义不影响基表中的数据。
            只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
            视图被删除后,基于被删除视图的其他视图或应用将无效。

更多相关文章
  • 从csdn上面看到一个如何创建触发器的问题,感觉自己很有必要保存学习,特写下来:条件:现有A.B两张表A: 工号 姓名 密码 性别 年龄 ...B: 工号 姓名 密码当对A表中的"密码"字段进行修改时,B表中的"密码"字段同样被修改,创建触发器:代码如下:-- ...
  • 人总在无形或有意中喜欢那么一点小聪明的懒惰.在ORACLE中建立表结钩相同或一致的表,其实在许多时候也会派上用场的.方便得很.例如:存在一张部门表如下:SQL> select * from dept;  DEPTNO DNAME          LOC  ------ ----------- ...
  • 一,创建rmants表空间,同时创建rman用户并配置其默认表空间create tablespace rmants datafile 'D:\oracle\product\10.1.0\rman\rmants01.dbf' size 50M create user rman identified b ...
  • ORACLE中创建如何创建表,并设置结构和默认值
    使用select语句查看EMP表,根据COMM排序默认情况下,空值会自动排列在尾部.利用nulls last排序时将空值置底利用nulls first排序时将空值置顶例 创建一张出版社表 使用语句 create table 表名(列名1 类型,列名2 类型,…….)需求:列  编号    varch ...
  • 前提是数据库上需要安装java虚拟机(JVM),使用下面的语句查看 select * from dba_registry where comp_id = 'JAVAVM'为空,则未安装,请执行 $ORACLE_HOME/javavm/install/initjvm.sql安装. 一.如何创建java ...
  • #实验环境: #Linux 5.4 #Oracle 11g r2 #创建Scott的操作过程: su – oracle vi $ORACLE_HOME/rdbms/admin/utlsampl.sql #把 DROP USER SCOTT CASCADE这一行注释了,在前面加上 -- #然后在DRO ...
  • CREATE OR REPLACE PROCEDURE aa is CURSOR prodCombind_cur IS SELECT * FROM proddata.product_combind_info pci; prodCombindInfo prodCombind_cur%ROWTYPE; ...
  •         tips: 查询视图没有什么限制, 插入/更新/删除视图的操作会受到一定的限制; 所有针对视图的操作都会影响到视图的基表; 为了防止用户通过视图间接修改基表的数据, 可以将视图创建为只读视图(带上with read only选项).        视图中的数据会随基表的更新而自动更新 ...
一周排行
  •  source:http://blog.sina.com.cn/s/blog_5ce0e67e0100baf5.html http://doc.linuxpk.com/28437.html1.事先安装好Apache2 ...
  • 一.从 WINS 迁移到 DNS对于纯粹的Windows 2000 Server环境,不可能减少甚至清除网络上的WINS.从网络删除已安装的WINS服务器的过程叫做"退役".在决定让网络上的WIN ...
  • 第一步:安装插件:yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libst ...
  •     $return=$high-floor(($num-$min_num_add+$y_pxdensity)/(($max_num_add-$min_num_add)/$high));    return $re ...
  • protected void Button1_Click(object sender, EventArgs e)    {        Export("application/ms-excel" ...
  • 变相的实现connect的超时,我要讲的就是这个方法,原理上是这样的:1.建立socket2.将该socket设置为非阻塞模式3.调用connect()4.使用select()检查该socket描述符是否可写(注意, ...
  • 我有一个解决方案,可以把VB平台上成千上万的开发者吸引到你们的手机应用商店中.即:允许开发者在手机应用商店中发布.zip格式的文件手机应用商店吸引开发者的目的是为了推销自己的手机,同样开发者在网上发帖,也是为了推销自 ...
  • 遇到很多widnows2003sp2安装sql2005出错,在官网发现与服务器多核处理器线数有关(https://support.microsoft.com/zh-cn/kb/954835/zh-cn):若要更改 W ...
  • 使用git的时候每次都输入密码很是麻烦,所以通常的情况下采用SSH公匙登录.下面是配置SSH公匙登录的方法: 1.初次使用git的话要设置用户名和邮箱 $ git config --global user.name ...
  • 一. VIM高亮:syntax enable :source $VIMRUNTIME/syntax/php.vim 二. VI常用命令_________________________________________ ...