set atuo off 
改成set transaction....

解决方案 »

  1.   

    去掉set atuo off;
    存储过程里是不会自动提交事务的
      

  2.   

    那为什么我写的存储过程里面没有commit;语句
    但执行存储过程后表的内容确实变了!!我想问,在存储过程中怎么定义一个事务???
      

  3.   

    set auto off是sql plus中的命令不能在存储过程中使用
      

  4.   

    ...
    begin
      insert into SCOTT.SKY_STATE values(msgID,msgContent);
      update SCOTT.SKY_SUCCESS set AFFIRM_MSG = 1 where  SCOTT.SKY_SUCCESS.MSG_ID = msgID;
    commit;
    --当插入或更新出现异常则回滚,否则提交.
    exception
      when others then
        rollback; 
    end;
      

  5.   

    oracle缺省是显式提交的,但有些情况会自动给你提交,比如在sqlplus中执行了一些操作但你没有提交,如果此时退出sqlplus,会自动给你提交。
      

  6.   

    关于“那为什么我写的存储过程里面没有commit语句
    但执行存储过程后表的内容确实变了!!”原因可能是你的客户端工具帮你做了commit.
    也可能是你执行查询的语句还在这个事务里。可以测一下,执行存储过程后,执行rollback,再看看数据是否变了。