我有一個問題。我需要在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