在 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,所以我希望你还没有使用它...除非是这种情况,否则我会寻找尝试模拟 mysqlAUTO_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不同步

codeigniter oracle 获取 insert_id()

在 Oracle 的过程中重用选择查询

如何在 Oracle SQL 语句中重用动态列?

在 Oracle PL/SQL 中重用绑定变量