存储过程中不支持ROLLBACK和COMMIT的在被触发器调用时。我写的过程没问题,不知道你的问题出在哪里,实在抱歉。

解决方案 »

  1.   

    存储过程中不支持ROLLBACK和COMMIT的功能是在被触发器调用时。如果你是用触发器启动的存储过程,肯定会出问题:
      

  2.   

    跟触发器无关,存储过程在sql>下运行各种情况均没问题,我是在asp.net中调用存储过程会出现上述无法rollback的情况。
      

  3.   

    1:为什么在执行过程中我的Oracle进程消耗内存不断膨胀,造成运行速度越来越慢,我只好运行shutdown immediate,再startup来清除,有无办法通过程序清除(我用的是Asp.net),或告诉我造成此类现象的原因及编程时要注意的事项 A.在编程时,注意关闭CURSOR
     B.及时断开不必要的session
     C.通过程序清除不是好方法.还是由DBA在后台用alter system kill XXXX来做为好.  
      

  4.   

    消耗内存的膨胀,在V$SQLAREA中看看是什么SQL语句有问题了.是不是有什么循环.一般都是程序中SQL错误造成的,
    或是查看一下系统表例如V$SGA,V$WAITSTAT,V$SESSION等等来分析一下了.
    看看后台日志文件alter.log,有没有什么错误了.
      

  5.   

    开张了,我对各位的建议都试试,可以肯定的是我的存储过程中Cursor是肯定关闭的,至于存储过程我是通过Asp.net调用的,是否执行完要关闭,如何关闭呢?
      

  6.   

    public string RunWithStrSql(string sql)
    {
    //
    //用途:执行单条SQL语句,如插入、修改、删除。当执行SQL出错时,返回错误消息,否则返回空字符
    string Message="";
    System.Data.OleDb.OleDbCommand comm=new OleDbCommand(sql,OraConn);
    try
    {
    OraConn.Open();
    comm.Connection=OraConn;
    comm.ExecuteNonQuery();
    }
    catch ( Exception e)
    {
    Message=e.Message;
    }
    finally
    {
    OraConn.Close();
    }
    return Message; //**这句话应该放在finally块中
    }
      

  7.   

    public string Proc(string procName,string[] prams,string[] values)
    {
    //用途:执行代输入、输出参数的存储过程,以完成插入、修改、删除操作。
    OleDbCommand comm = GetOraComm(procName,prams,values); 
    OraConn.Open();
    comm.ExecuteNonQuery();
    OraConn.Close();
    string AA=comm.Parameters["RururnValue"].Value.ToString();
    return AA;
    }
      

  8.   

    我就是这样做的啊,只不过是循环读某个文本,将每一笔用comm.ExecuteNonQuery();插入表中,同时我是在循环体外打开数据连接,循环结束后才关闭的,所以我想应该不是上述原因。
      

  9.   

    pro1为多条Insert语句,如果有一条insert不成功,就应该RollBack,可是却提示无法在分布式事务处理中ROLLBACK ORA-06512。你的pro1(strSql varchar2,strOut out integer)里的strSql包含了所有的Insert语句吗?
    如果你用一次pro1(strSql varchar2,strOut out integer)只完成一条记录的插入,则你在成功插入前几条记录就已经CommitTransaction。当第n条失败了,就只能Rollback当前的那n条记录了。
    如果你的pro1(strSql varchar2,strOut out integer)调用一次就完成十条记录的insert,那就不知道为什么不能Rollback了。
    我们的做法都是调用一次prol,insert一条记录,在外部控制Transaction.
      

  10.   

    up,建議你到itpub問問﹐那里人氣旺一點﹗