zoukankan      html  css  js  c++  java
  • Oracle-31-对视图DML操作

    一、对视图进行DML操作

    1.创建一个视图v_person


    create or replace noforceview v_person

    as select *from person where id between 1003 and 1007;

     

    2.向视图v_person中进行insert操作


    insertinto v_person (id,name) values(1010,’J’)


    【注意】对视图进行DML操作时候。仅仅能对简单视图运行DML操作。复杂视图不支持DML操作。因为v_person没有使用with check option。因此对于子查询检索到的行能够进行增删改查。

     

    1:练习对视图(没有with check option)插入数据。

    解:当前用户下视图v_stu的数据




    视图v_stu的基表是student表,该表当前的数据:




    对视图插入新数据:




    查询视图发现多了一行:




    查询基表发现多了一行:




    因此。对视图进行DML操作可达到改动基表数据的效果。


    2:练习对视图(有with check option)插入数据。

    解:创建视图并将已存在的视图覆盖。带上with check option:




    然后插入例如以下数据:




    报错原因是’男’不满足视图中的where条件。视图有with check option是对新数据进行校验。假设满足where条件,则同意插入,否则不同意。

    同理,例如以下报错是由于视图在创建的时候要求仅仅读。即with read only:




    3:练习两张基表生成视图且验证是否能在该视图中插入新数据。

    解:当前的sc表:




    当前的course表:




    基于sc表和course表创建视图v_2,注意下图SQL命令:




    向视图中插入新数据:




    报错原因是该视图是基于两张表创建的。所以无法插入新数据。

     

    【注意】

    下面三种情况无法对视图做DML操作:

    1.带有with check option的视图,假设插入数据不满足where条件则无法做DML操作。如2

    2.带有with read only的视图。2

    3.基于两张及两张以上基表的视图,比方student,course,sc表生成一个视图,那么这个视图无法做DML操作如3

  • 相关阅读:
    【笔记】算法图解
    redis两个主同时挂
    redis有间隔的kill 两个主:
    数据中心机房燃气分布式能源系统的作用是什么?
    C# DEBUG 调试信息打印及输出详解
    C# DEBUG 调试信息打印及输出详解
    C# DEBUG 调试信息打印及输出详解
    C# DEBUG 调试信息打印及输出详解
    多态中的题目分析题
    多态中的题目分析题
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7235581.html
Copyright © 2011-2022 走看看