倒数第2句是delete from。这个trigger通不过...郁闷。

解决方案 »

  1.   

    create view viewname
    as
    select id from tablename;
      

  2.   

    我想如果这个可以成功,那么从多个表中select后建立的视图也是可以同样进行删除操作的,对吗?
      

  3.   


    view中的记录删除了,实际上就是在相应的表中删除记录,不需要建触发器去删除表中的记录,而且这样的操作也是错误的
      

  4.   

    那么从多个表中select后建立的视图也是可以同样进行删除操作的,对吗?这个是不对的,因为,多表查询是很复杂的,ORACLE可能无法确定删除视图中的某条记录对应表中的哪条记录。
      

  5.   

    要看视图是如何构成的,基于单个表的视图从视图中可删除相应表的数据。
    如果视图由多个表构成,对视图进行数据操作就可能出现错误,如:
    ORA-01732: data manipulation operation not legal on this view
    这种情况一般可通过替代触发器来完成对表的数据操作。如:
    create or replace trigger mytrig
    instead of insert on viewname
    declare
    ......
    begin
    ......
    end;
    /
      

  6.   

    嗯,各位都是强人,谢谢!
    我做了一个多表查询的视图,从视图里删一行的时候用instead of触发器删除表中的数据,这样应该可以的吧
      

  7.   

    如果是多表查询,事实上你用到了连接,从视图中删数据并不是所有数据都可以成功。如果你要删的数据仅来自key-preserved table ,那就恭喜你,可以直接删掉了,如果不是,就想其他办法吧。总之,对在多表查询基础上建立的视图进行DML是一个很严格的过程,那些苛刻的条件恐怕无法满足你的要求。Have a good day.
      

  8.   

    在视图上不能建立before delete trigger吧.