视图简介

 在创建视图时可以使用group by ,order by 子句,函数等,使用函数时需要指定列别名
  1, 简单视图:使用单表查询创建的视图
    
      可以对视图进行增删改操作,除了一些限定外,如:创建只读视图,或带有with chek option 选项的视图,或视图中不包含
      基表中不允许为空的列(不允许向视图中插入数据)等

     1)使用with check option  可以限定对单表视图的修改,  不能更新无法通过该视图查看的行
        create or replace view  emp_view  as select * from emp where job='SALESMAN' with check option constraint empv;

   SQL> select * from emp_view;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
      7499 ALLEN      SALESMAN        7698 20-2月 -81       1600        300         30
      7521 WARD       SALESMAN        7698 22-2月 -81       1250        500         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81       1250       1400         30
      7844 TURNER     SALESMAN        7698 08-9月 -81       1500          0         30

       update emp_view  set job='CLERK' where empno=7499;将无法更新
       如创建视图时没有with check  option, 修改视图后将在视图查不到该行数据

    2) 使用with read  only  创建只读视图
        create or replace view  emp_view  as select * from emp where job='SALESMAN' with  read only;
    3)  创建视图时使用force,强制创建视图     
       如果视图定义中引用了不存在的表或表中有不存在的列,或创建视图的所有者没有访问表的权限,都可以创建,
       但创建的视图有错误,在稍后创建表或得到访问权限后,ORACLE自动重新编译使视图有效,可以手动编译
            
       假设dept表也不存在a1列,但还可以创建视图,但会提示错误,在表dept添加列a1后,视图自动编译为有效
       create or replace force view emp_view  as select  a1,dname  from dept;
       可以 使用  alter view   emp_view  compile ;   手动编译
   
     
   2, 复杂视图 :
         1)使用多表联接创建视图,
         2)创建视图时包括函数或group by 等
        
 
       复杂视图通常不能直接进行增删改,但对于使用多表联接创建的视图,可以使用INSTEAD OF 触发器可以修改(后面课程)
       create or replace view emp_dept_view as select empno,ename,dname,emp.deptno
       from dept,emp where dept.deptno=emp.deptno;
     
   3, 键保留表
      键保留表:复杂视图中出现的表。
      如果满足条件:1) 主键列全部显示在视图中,并且它们的值在视图中都是唯一且非空的.
      如:       create or replace view emp_dept_view as
              select empno,ename,dname,dept.deptno
                from dept,emp where dept.deptno=emp.deptno;

       empno:是emp表的主键,并且它的值在emp_dept_view 中是唯一且非空.所以emp表是键保留表
             而deptno的值在视图中不唯一,所以dept不是键保留表
      可以 修改视图中键保留表中的数据,主键值除外
              update emp_dept_view set ename='JOE' where empno=7566;  //可以
              update emp_dept_view set dname='abc' where deptno=30;  //不行   dname是dept表中的列,dept不是键保留表     
     
   4,分区视图
     create or replace view  v_emp  as select * from emp1  partition(p1) union all select * from  emp1 partition(p2);

     数据字典: user_views   
     使用方法:在SQL*PLUS下
             col view_name for a10     --定制显示的列宽
             col text for for a50
             set linesize 200          --设置每行显示的字符数
             select view_name,text from user_views;   --查看用户创建的视图情况

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值