今天发生在用ODP.NET调整一个存储过程时发生了两个奇怪的错误。
- ORA-08103: object no longer exists
- ora-01410: invalid rowid
网上都说是索引块有错误什么的,我索引也重建,表也重建了,但还是不行。
奇怪的是我直接测试存储过程是有结果的。
后来发现是存储过程中使用了临时表,而我在代码中又没有使用事务,当我加上事务后程序就正常了。 正常的代码像下面这样:
using (var conn = SqlHelper.GetConnection() as OracleConnection){conn.Open();var trans = conn.BeginTransaction();var cmd = conn.CreateCommand();cmd.CommandText = "PKG_LIMIT_RESULT.OVERVIEW_RESULT_LIST";cmd.CommandType = CommandType.StoredProcedure;var p1 = new OracleParameter("P_DATA_SET", OracleDbType.RefCursor, ParameterDirection.Output);var p2 = new OracleParameter("P_BEG_DATE", OracleDbType.Varchar2, "2012-10-08", ParameterDirection.Input);var p3 = new OracleParameter("P_END_DATE", OracleDbType.Varchar2, "2012-11-17", ParameterDirection.Input);//.....cmd.Parameters.Add(p1);cmd.Parameters.Add(p2);cmd.Parameters.Add(p3);//.......var reader = cmd.ExecuteReader();while (reader.Read()){//Console.WriteLine(reader.GetInt32(0));}reader.Dispose();
trans.Commit();
}