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

时间:2010-11-12 15:59:54

标签: sql perl dbi

我有一个名为BUILD_INFO的表格,它包含以下列:

  • BUILD_ID
  • BUILD_NAME
  • DATE
  • USER

BUILD_ID是一个自动增量字段,因此我在插入时不会设置它。它是用于将此表中的此行与其他表中的其他行相关联的主键。

当我在BUILD_INFO表中插入新行时,我想知道已设置的BUILD_ID,因此我可以检索它并在其他表中添加行时使用它。

我无法通过其他列查询它,因为其他行可能会复制这些列值。我不能简单地重新查询表并拉出最大的BUILD_ID因为另一个用户可能在我之后插入了一行。如果有Row Number这样的东西可以检索并查询行,那就太好了。这样的事情存在吗?

我正在使用DBI模块在​​Perl中编写脚本,我的数据库可以是Oracle或MySql。

如何检索刚插入SQL或使用Perl DBI模块的行的信息?

3 个答案:

答案 0 :(得分:4)

$dbh->last_insert_id();

但请参阅http://p3rl.org/DBI#last_insert_id

中的警告

答案 1 :(得分:2)

听起来你想在数据库句柄上使用last_insert_id方法。但是,实际上,如果你查看DBIx::Class并停止编写原始SQL,你的生活会更容易。

答案 2 :(得分:0)

感谢davorg指出DBI->last_inserted_row()包中的DBI方法。我是DBI软件包的新手,并且在某种程度上错过了它,尽管它清楚地列出了HTML索引中selectrow_hashref方法之上的两个条目。这听起来像我正在寻找的。

至于你的顾虑,我实际上正在创建一个包,所以我们可以摆脱编写原始SQL查询。我出于各种原因讨厌原始SQL查询。首先,对于大多数开发人员来说,编写它们并不容易,而且理解起来也很棘手。此外,它们通常硬编码为数据库布局的假设以及它的连接方式。最重要的是,大多数开发人员都在编写它们。

我希望我之前了解过DBIx。这样可以为我节省很多工作。问题是我们的开发机器没有Internet访问权限,这使得安装包很麻烦。我必须通过DBIx文档。现在,它看起来比我们需要的要复杂得多。

也非常感谢ysth也指出了DBI->last_insert_row()方法(以及随之而来的警告)。不知何故,我在阅读DBI文档时错过了这种方法。我将不得不看看它是否在Oracle中有效它将与MySql一起使用,因为我们索引表的列是一个自动增量列。