今天发觉一个奇怪的现象,前两天建的一个link造成了我在更新数据库的时候报ORA-01453: SET TRANSACTION must be first statement of transaction错误
具体情况时这样,我一开始运行一句select的sql 这句sql中用到了一个link去连接其他数据库
当select数据出来后我去更新这条数据,就会报ORA-01453: SET TRANSACTION must be first statement of transaction错误
想请教大家这是什么原因?难道执行了跨库操作,普通事务就不行了,要用分布式事务?

解决方案 »

  1.   

    现在发觉好像只要执行带有link的sql语句就会有锁
      

  2.   

    谢谢 ruide205(苏森) 
    现在倒不是做link的数据库的表不能更新,而是所有表在更新的时候只要一用事务都报错
      

  3.   

    在执行select时,如果包含远程的表,那么系统就会起了事务,此后如没commit/rollback,就执行set transaction肯定要出错。
      

  4.   

    谢谢bobfang(匆匆过客) 
    问题知道在哪里了,可是我怎么commit/rollback呢?我如果再select的时候就启用事务就会报
    Execute requires the Command object to have a Transaction object when the Connection object assigned to the Command is in a pending local transaction.  The Transaction property of the Command has not been init现在问题是我如何在程序里提交系统自己启动的事务,在SQL里写commit的语句吗?
      

  5.   

    在存储过程中或是pl/sql中,可以直接执行commit或者rollback。不知道你是用的什么开发工具,采取什么方式连接数据库的。
      

  6.   

    我现在用的vb.net,那句select 的sql是用字符串的方式向数据库提交的,这句sql的前后又不能加事务处理,所以我不知道怎么做了
    还有oracle的事务里是不是不能有select语句?
      

  7.   

    谢谢bobfang(匆匆过客)
    问题已经初步解决了我在那句有link的select语句后面加了一句commit语句如下
                    cmd.CommandText = "commit"
                    cmd.ExcuteNonQuery()
    用这样的方法提交系统自动启动的事务,问题解决
    但是我想如果我有link的语句是update语句的话,这样我在程序里面一定会自己启动事务,系统的事务
    和我的事务是否会有冲突呢?