在 CodeIgniter 中重用 oracle 序列中的值
Posted
技术标签:
【中文标题】在 CodeIgniter 中重用 oracle 序列中的值【英文标题】:Re-use value from oracle sequence in CodeIgniter 【发布时间】:2015-11-10 17:41:35 【问题描述】:我需要从此查询中检索一个值
$result = $this->db->query("SELECT MY_SEQ.NEXTVAL VALUE DUAL") ->result_array();
变量 $result 用于进行 3 次后续插入, 但每次我需要使用 $result[0]['VALUE'] 时,它都会为最终值添加 +1。
如何在不使用插入和查询的情况下重用该值来获取序列的当前值?
Ps:我正在使用 codeigniter 和 oracle 9i 数据库
提前致谢
【问题讨论】:
访问$result
var 不可能增加值。重新执行查询即可。
其实应该是这样的,但是我做了一个测试,将值存储在一个变量中并进行了1次插入,它起作用了,当我在下面立即添加第二次插入时,表格字段是每次增加 2,不知何故 codeigniter 正在重新执行查询。
CodeIgniter 2 中有一个 bug,其中对 oracle 的查询实际上执行了两次,但是现在官方不支持 2.x,所以我希望你还没有使用它...除非是这种情况,否则我会寻找尝试模拟 mysql 的 AUTO_INCREMENT
的触发器。
事实上我正在使用 codeigniter 2.x,因为它是一个遗留系统,所以我会尝试将我的项目移动到 3.x 版本,谢谢你的帮助:)
【参考方案1】:
一旦你调用了 nextval,你就可以使用
$result = $this->db->query("SELECT MY_SEQ.CURRVAL VALUE FROM DUAL") ->result_array();
这会为您提供序列的当前值,但是如果其他会话同时调用此序列,那么您可能无法获得一致的结果。
【讨论】:
这是问题,至少有10个用户同时处理信息,我不想冒这个风险以上是关于在 CodeIgniter 中重用 oracle 序列中的值的主要内容,如果未能解决你的问题,请参考以下文章
初学者 CodeIgniter 概念 - 可重用的视图代码,该去哪里? (帮手?)
Codeigniter和Oracle Query Results不同步