我用的是linux oci编程,调用commit()时有时提交不成功事务,弄得没有保存到磁盘数据文件,造成数据丢失。请问如何保证成功提交事务到数据文件里。谢谢!!
解决方案 »
- Oracle 分页的存储过程
- 子查询内用nvl,到外层再关联怎么就像成笛卡尔积了
- PL/SQL Developer 7.0.3 大家过来帮帮忙
- 关于存储过程的符号作用
- 在win2000环境下安装developer6.0出错(也许是developer2000)
- 没有监听器,怎么办?!
- 一个小问题
- 请问,在oracle 怎么写sql语句查询dwm数据库以t开头的表啊,谢谢,急
- 哪个网站提供有Oracle Designer/2000的完全版下载,我是宽带!!!谢谢!!!
- SOS!VB下如何从过程里返回一个NULL的记录集!!!
- 真的求高手指教,现在第二天数据比昨天的数据都莫名其妙的减少一部分,不知原因!
- 请问如何查询ORACLE的历史操作记录!!!!!
你用的COMMIT是OCI自带的COMMIT方法么?那应该是提交到数据库里的。
不能完全保证事务成功提交到数据库里,只能在每次COMMIT时,进行判断。
如果提交没有成功,记错误日志。
我用的是OCI自带的COMMIT方法,请问如何判断每次commit返回参数,请列出具体代码看看,谢谢!
我用的是提交数据库的OCITransCommit方法,不是直接的commit
对于OCITransCommit方法,返回值有如下:
OCI_SUCCESS,OCI_SUCCESS_WITH_INFO,OCI_NEED_DATA,OCI_NO_DATA之类的;你可以查查你的commit方法有哪些返回参数。
Stmt->setSQL(strsql);
count=Stmt->executeUpdate();
Conn->commit();
Conn->terminateStatement(Stmt);请问OCITransCommit()可以替换为commit()吗?
另外,你这里的commit不是OCI自己的方法,你不是通过一个类对象Conn来调用的嘛?
你的commit是类Conn里封装的一个方法。
你得深入到类Conn里仔细看了。
我估计哈,这个类Conn->commit()方法里,实际上调用的还是OCITransCommit()
呵呵,你自己找找吧。
Connection *Conn;
Statement *Stmt;
Env = Environment::createEnvironment(Environment::OBJECT);
Conn = Env->createConnection(user, pwd, strconn_string);
Stmt = Conn->createStatement();
Stmt->setSQL(strsql);
count=Stmt->executeUpdate();
Conn->commit();
Conn->terminateStatement(Stmt);
以上就是源程序的主要代码,就这么简单
在头文件里定义:
class connection
{
private:
...
public:
sword commit();
...
}
在cpp文件里定义:
sword connection::commit()
{
if(_state != connected) return OCI_ERROR;
return checkerr(OCITransCommit(_svchp, _errhp, (ub4) 0));
}