我有一个问题。我需要在Firebird数据库的所有表中获取最后插入的行。还有,这些行必须包含指定的列名。我阅读了一些关于rdb $的文章,但有一些经验。如何获取Firebird数据库中所有表格中最后插入的记录(行)?
任何人都可以帮忙吗?
Thanx。
我有一个问题。我需要在Firebird数据库的所有表中获取最后插入的行。还有,这些行必须包含指定的列名。我阅读了一些关于rdb $的文章,但有一些经验。如何获取Firebird数据库中所有表格中最后插入的记录(行)?
任何人都可以帮忙吗?
Thanx。
没有'插入最后一行'的概念。其他事务的可见性和可用性取决于提交时间,指定的事务隔离等。即使使用ain建议的生成器或时间戳也不会真正有助于解决此问题。
也许你更好的指定你正试图解决的实际问题。
我会尽力解释我的问题。我有db中的表(id,someval,someval2等)。另外我有一个autoincrement id字段的生成器。当我插入新的记录没有预定义的ID(工程GEN_ID())一切正常。当我用可选(随机)ID(例如导出一些数据)插入记录时,它也可以工作,但是当我尝试在此之后插入下一条记录时 - 我收到访问冲突错误。这就是为什么我需要从发生器和最后一次插入控制ID值。也许我需要在我的自动增量方法中做一些修复? – v0latile
我假设你的意思是一个唯一/主键约束冲突,而不是一个访问冲突,否则就是一个错误。无论如何:确保只有一种方法:始终使用生成器值。如果您需要该值,请查看[INSERT ... RETURNING](http://www.firebirdsql.org/file/documentation/reference_manuals/reference_material/html/langrefupd25-insert.html#langrefupd25-insert-returning) –
SELECT GEN_ID(ID_HEDER,0)+1 FROM ANY_TABLE INTO :ID;
INSERT INTO INVOICE_HEADER (No,Date_of,Etc) VALUES ('122','2013-10-20','Any text')
/* ID record of INVOICE_HEADER table gets the ID_number from the generator above. So
now we have to check if the ID =GEN_ID(ID_HEADER,0) */
IF (ID=GEN_ID(ID_HEADER,0)) THEN
BEGIN
INSERT INTO INVOICE_FOOTER (RELACION_ID, TEXT, Etc) Values (ID, 'Text', Etc);
END
ELSE
REVERT TRANSACTION
这是所有
为什么你需要的最后一个记录?也许有更容易/更好的方法来解决问题... – ain