Sql 如何获取Firebird数据库中所有表中最后插入的记录(行)?

Sql 如何获取Firebird数据库中所有表中最后插入的记录(行)?,sql,select,firebird,Sql,Select,Firebird,我有个问题。我需要获取Firebird db中所有表中最后插入的行。还有一点,这些行必须包含指定的列名。我读了一些关于rdb$的文章,但对这篇文章有一些经验 有人能帮忙吗 塔克斯 除非表中有一个存储该信息的时间戳字段(插入时间戳),否则没有可靠的方法来获取“插入的最后一行” 如果该表使用sequense(Firebird行话中的生成器)生成的整数PK,则可以查询最高的PK值,但这也不可靠。除非该表具有存储该信息的时间戳字段(插入时间戳),否则无法可靠地获取“插入的最后一行” 如果表使用seque

我有个问题。我需要获取Firebird db中所有表中最后插入的行。还有一点,这些行必须包含指定的列名。我读了一些关于rdb$的文章,但对这篇文章有一些经验

有人能帮忙吗


塔克斯

除非表中有一个存储该信息的时间戳字段(插入时间戳),否则没有可靠的方法来获取“插入的最后一行”


如果该表使用sequense(Firebird行话中的生成器)生成的整数PK,则可以查询最高的PK值,但这也不可靠。

除非该表具有存储该信息的时间戳字段(插入时间戳),否则无法可靠地获取“插入的最后一行”


如果表使用sequense(Firebird行话中的生成器)生成的整数PK,则可以查询最高的PK值,但这也不可靠。

没有“插入最后一行”的概念。其他事务的可见性和可用性取决于提交时间、指定的事务隔离等。由于可见性问题,即使使用ain建议的生成器或时间戳也没有真正的帮助


也许您最好指定您试图解决的实际问题。

没有“插入最后一行”的概念。其他事务的可见性和可用性取决于提交时间、指定的事务隔离等。由于可见性问题,即使使用ain建议的生成器或时间戳也没有真正的帮助

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
也许您最好指定您试图解决的实际问题

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
就这些


这就是全部

并非我数据库中的每个表都使用整数主键。我可以通过rdb$获得所有表名(名称列表)。我不知道如何为这些名称中的每一个构造查询以查找max(id)。如果没有“代理id自动递增”字段,则不可能找到最后插入的行,也不可能使用触发器来记录插入。my db中的每个表都使用integer主键。我可以通过rdb$获得所有表名(名称列表)。我不知道如何为这些名称中的每一个构造查询以查找max(id)。如果没有代理id自动递增字段,则无法找到最后插入的行,也无法使用触发器记录插入为什么需要最后一条记录?也许有更简单/更好的方法来解决这个问题……为什么需要最后一张记录?也许有更简单/更好的方法来解决这个问题……我会尽力解释我的问题。我有db格式的表(id、someval、someval2等)。我还有一个自动增量id字段生成器。当我插入没有预定义id(works GEN_id())的新记录时,一切正常。当我插入带有可选(随机)id的记录(例如导出一些数据)时,它也可以工作,但当我尝试在此之后插入下一条记录时,我收到访问冲突错误。这就是为什么我需要控制生成器和上次插入的id值。也许我需要在我的自动增量方法中进行一些修复?我假设你指的是唯一/主键约束冲突,而不是访问冲突,否则这将是一个bug。在任何情况下:确保只有一种方法:始终使用生成器值。如果你需要这个值,调查一下,我会尽力解释我的问题。我有db格式的表(id、someval、someval2等)。我还有一个自动增量id字段生成器。当我插入没有预定义id(works GEN_id())的新记录时,一切正常。当我插入带有可选(随机)id的记录(例如导出一些数据)时,它也可以工作,但当我尝试在此之后插入下一条记录时,我收到访问冲突错误。这就是为什么我需要控制生成器和上次插入的id值。也许我需要在我的自动增量方法中进行一些修复?我假设你指的是唯一/主键约束冲突,而不是访问冲突,否则这将是一个bug。在任何情况下:确保只有一种方法:始终使用生成器值。如果您需要该值,请查看