代码之家  ›  专栏  ›  技术社区  ›  David W.

检索刚刚插入到SQL表中的特定行

  •  2
  • David W.  · 技术社区  · 15 年前

    我有张叫的桌子 BUILD_INFO 它有以下几列:

    • BUILD_ID
    • BUILD_NAME
    • DATE
    • USER

    这个 建筑标识 是一个自动增量字段,所以在执行插入操作时不进行设置。它是用于将此表中的此行与其他表中的其他行关联的主键。

    当我在 建筑信息 桌子,我想知道 建筑标识 已经设置好了,所以我可以检索它,并在其他表中添加行时使用它。

    我不能通过其他列查询它,因为其他行可能会复制这些列值。我不能简单地重新找桌子,把最大的桌子拉起来 建筑标识 因为另一个用户可能在我插入后插入了一行。如果有什么像 Row Number 我可以检索和查询行。这样的东西存在吗?

    我正在用Perl编写脚本 DBI 模块和我的数据库可以是Oracle或MySQL。

    如何检索刚刚插入到SQL或使用Perl的行的信息 双折射 模块?

    3 回复  |  直到 15 年前
        1
  •  4
  •   ysth    15 年前
    $dbh->last_insert_id();
    

    但要注意的是 http://p3rl.org/DBI#last_insert_id

        2
  •  2
  •   Dave Cross    15 年前

    听起来你想要 last_insert_id 数据库句柄上的方法。但是,事实上,如果你看看你的生活会容易得多 DBIx::Class 停止编写原始SQL。

        3
  •  0
  •   Community Mohan Dere    8 年前

    谢谢 davorg 为了指出 DBI->last_inserted_row() 方法在 DBI 包裹。我是新来的 双折射 包,但不知何故错过了它,尽管上面清楚地列出了两个条目 selectrow_hashref HTML索引中的方法。听起来像是我在找的。

    至于您的问题,我实际上正在创建一个包,因此我们可以避免编写原始的SQL查询。我讨厌原始的SQL查询,原因有很多。首先,对于大多数开发人员来说,它们并不容易编写,而且很难理解。另外,它们通常是硬编码的,以假设数据库布局和连接方式。最重要的是,大多数开发人员都不擅长编写它们。

    我真希望我以前知道dbix。那会节省我很多工作。问题是我们的开发机器没有互联网接入,这使得安装软件包非常痛苦。我必须浏览dbix文档。现在,它看起来比我们需要的要复杂一些。

    谢谢 ysth 同时指出 DBI->last_insert_row() 方法也是如此(以及随之而来的注意事项)。不知怎么的,我在阅读 双折射 文档。我要看看它是否在Oracle中工作,它是否在MySQL中工作,因为我们为表编制索引的列是一个autoincrement列。