各位高手,创建视图的SQL语句里用到了分组和聚合函数,创建成功是不是只能查询不能往里面插入啊?如果能插入是该怎么处理才不报错呢?

解决方案 »

  1.   

    一些视图可更新的限制
    1、在连接视图中不能有Order by排序语句。
    2、基础表中所有的NOT NULL列都必须在这个视图中。
    3、需要更新的列不是虚拟列。
    4、不能够具有分组函数。
    5、建立视图的Select语句中,不能够有集合运算符、子查询。
      

  2.   

    单单简单的插入是会报错的当然 如果楼主非要插入成功 那么可以通过INSTEAD OF触发器来实现对相应表的操作
    不过这样几乎没什么意义 因为逻辑会很复杂 有时甚至是无法判定的下面是个小例子 仅仅是为了说明方法 建议楼主还是不要这样做
    SQL> select * from t1;       ID1        ID2
    ---------- ----------
             1          2
             3          6
             1          7
             3          7
    SQL> create view v1
      2  as
      3  select id1,sum(id2) sum
      4  from t1
      5  group by id1;视图已创建。
    SQL> select * from v1;       ID1        SUM
    ---------- ----------
             1          9
             3          6
    SQL> create or replace trigger tri1
      2  instead of insert on v1
      3  begin
      4  insert into t1(id1,id2) values(:new.id1,:new.sum);
      5  end;
      6  /触发器已创建SQL> insert into v1(id1,sum) values(3,7);已创建 1 行。SQL> select * from t1;       ID1        ID2
    ---------- ----------
             1          2
             3          6
             1          7
             3          7SQL> select * from v1;       ID1        SUM
    ---------- ----------
             1          9
             3         13
      

  3.   

    视图是一个或几个基本表(或视图)导出来的表,是一个虚的表。
    视图是更新是有限制的。
    1.如果有2个或以上的不能更新。
    2.视图定义含有group by的句子,或含有distinct 也不能更新。
    3.来自聚集函数,也不能更新。
      

  4.   

    3楼:
    SQL> select * from v1;       ID1        SUM
    ---------- ----------
             1          9
             3          6--有问题该是13