ADO在查询视图时自动添加rowid,导致Ora 1445错误

 我的查询是类似

"select * from mv_view"

mv_view是一个多表联合视图.一直也没遇到啥问题,但是昨天用sql monitor抓错误的时候,发现查询被改成了

"select *,mv_view.rowid from mv_view"

并且触发了Oracle 1445错误,然后自动去掉rowid重新查询,成功!

 

后来找到了原因:

MSADO的  _RecordsetPtr的成员函数Open定义如下:

其中参数LockType是一个枚举,指定数据库锁定方式

之前使用的参数全部都是乐观锁adLockOptimistic,尝试换成adLockReadOnly后发现不会再自动添加rowid了.

 

原因是在ADO认为记录可能被Update时就会自动添加rowid,使用了adLockReadOnly参数相当于告知ADO记录不会被Update,ADO就不会自动添加rowid.

 

如果要Update 怎么办呢?那当然不能用只读锁,那就只能修改数据库视图,为视图加入唯一索引了.

PS:根据资料显示adLockReadOnly能够明显提高查询速度

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值