update (select * from T_IISS_SUBSCRIBE order by gid) sn set sn.status=1  where rownum <= 100
在PL/SQL中执行此语句出现:此视图的数据操纵操作非法 错误
麻烦高手解决,谢谢
补充:这个SQL在本地机器上执行没问题的,但是到服务器上运行就有问题了,怀疑是Oracle的版本或者驱动的问题,麻烦大侠解决一下,谢谢

解决方案 »

  1.   

    select * from T_IISS_SUBSCRIBE order by gid 中包含 order by 子句,是不可能被更新的。可以用下面的语句
    update T_IISS_SUBSCRIBE
    set status=1
    where rowid in (
    select rd from (select rowid rd from  T_IISS_SUBSCRIBE order by gid) where rownum<=100
    );不用 rowid ,用 T_IISS_SUBSCRIBE 表的主键也可以。
      

  2.   

    如果T_IISS_SUBSCRIBE 是试图的话,怎么可以update那?
      

  3.   


    update T_IISS_SUBSCRIBE  set status=1 
    where gid in 
    (
      select gid from 
      (select gid from T_IISS_SUBSCRIBE order by gid)
      where rownum <= 100
    )
      

  4.   


    我测试了你这个sql语句,能够正常执行,但你似乎没有懂我的意思啊大哥,
    我是说我在本地的数据库测试服务器上能够正常执行,但是在正式环境上就会报错,倒是感觉有点像1楼说的,“高版本客户端能连接低版本服务器,反之不行”
      

  5.   

    这么久了,你的视图是只有一个表建的 ,试试这个update T_IISS_SUBSCRIBE  set status=1 
    where gid in(select gid from (select * from T_IISS_SUBSCRIBE order by gid) rownum <=100)