【问题标题】:PHP/Oracle, returning inserted id's from Merge IntoPHP/Oracle,从 Merge Into 返回插入的 id
【发布时间】:2010-02-10 15:16:56
【问题描述】:

我目前正在开发一个使用 Oracle 数据库的 PHP 项目。为了更新一个表,我正在使用的 php 代码使用 SQL“MERGE INTO”方法来循环遍历一个表并查看多个记录的值是否存在于另一个表中。如果它们尚不存在,则将这些值插入我的表中。如果这些值已经存在,则不会发生任何事情。

我希望在此之后运行另一个查询,该查询使用在 MERGE INTO 查询中创建的自动递增 id。有没有办法获取新创建的 id 数组?我希望有类似 mysql_insert_id 的东西,但我还没有找到类似的东西。

谢谢!

【问题讨论】:

    标签: php sql oracle plsql


    【解决方案1】:

    甲骨文has supported the MERGE syntax since 9i。没试过,但你也许可以在 MERGE 语句上使用 RETURNING 子句...

    甲骨文uses sequences for handling automatically incremented values。创建序列后,您可以使用:

    sequence_name.CURVAL
    

    ..获取当前值,就像 mysql_insert_id 将返回的值。要填充主键,您可以使用:

    sequence_name.NEXTVAL
    

    要在 INSERT 语句中填充主节点,您可以使用:

    INSERT INTO your_table
      (pk_id, ..
    VALUES
      (your_sequence.NEXTVAL, ...)
    

    您可以使用触发器作为替代方案,但它们不会返回当前值。

    【讨论】:

    • 最终使用触发器。谢谢!
    【解决方案2】:

    什么auto_incremented ids? AFAIK,甲骨文中没有这样的东西。您可以通过在表上添加触发器和序列号来模拟行为,但肯定没有 mysql_insert_id() 的等效项。

    我认为您需要返回并找到另一种方法来识别您的记录。

    C.

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2011-01-21
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      相关资源
      最近更新 更多