我有一个名为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
模块的行的信息?
答案 0 :(得分:4)
$dbh->last_insert_id();
中的警告
答案 1 :(得分:2)
听起来你想在数据库句柄上使用last_insert_id方法。但是,实际上,如果你查看DBIx::Class并停止编写原始SQL,你的生活会更容易。
答案 2 :(得分:0)
感谢davorg指出DBI->last_inserted_row()
包中的DBI
方法。我是DBI
软件包的新手,并且在某种程度上错过了它,尽管它清楚地列出了HTML索引中selectrow_hashref
方法之上的两个条目。这听起来像我正在寻找的。 p>
至于你的顾虑,我实际上正在创建一个包,所以我们可以摆脱编写原始SQL查询。我出于各种原因讨厌原始SQL查询。首先,对于大多数开发人员来说,编写它们并不容易,而且理解起来也很棘手。此外,它们通常硬编码为数据库布局的假设以及它的连接方式。最重要的是,大多数开发人员都在编写它们。
我希望我之前了解过DBIx。这样可以为我节省很多工作。问题是我们的开发机器没有Internet访问权限,这使得安装包很麻烦。我必须通过DBIx文档。现在,它看起来比我们需要的要复杂得多。
也非常感谢ysth也指出了DBI->last_insert_row()
方法(以及随之而来的警告)。不知何故,我在阅读DBI
文档时错过了这种方法。我将不得不看看它是否在Oracle中有效它将与MySql一起使用,因为我们索引表的列是一个自动增量列。