2016-09-30 28 views
0

我想獲取Trafodion中表中最後插入記錄的行ID或記錄ID。獲取trafodion中最後插入的行ID

例子:

1 | John <br/> 
2 | Michael 

當執行INSERT語句,我想回到創建的ID,意味着3

誰能告訴我該怎麼做,使用trafodion或者是不可能的?

回答

0

您是否正在使用序列生成器爲此表生成唯一的ID?事情是這樣的:

create table idcol (a largeint generated always as identity not null, 
        b int, 
        primary key(a desc)); 

無論哪種方式,有或無序列發生器,你可以用這個說法得到最高的關鍵:

select max(a) from idcol; 

的問題是,這種說法可能是非常低效的。 Trafodion有一個內置的優化來讀取關鍵列的最小值,但是它並沒有對最大值使用相同的優化,因爲直到最近HBase纔有反向掃描。我們應該利用反向掃描,請隨時提交JIRA。爲了使當前代碼更高效,我在主鍵聲明中添加了一個DESC。具有下降的關鍵,獲得最大關鍵將是非常快:

explain select max(a) from idcol; 

然而,其產生更高值的降低可能會導致問題的HBase中的數據增長,我不知道這是否是一個問題或不。

這裏是另一種解決方案:使用Trafodion功能,可以讓您選擇插入的數據,顯示你馬上插入的值:

select * from (insert into idcol(b) values (11),(12),(13)) t(a,b); 

A      B   
-------------------- ----------- 

        1   11 
        2   12 
        3   13 

--- 3 row(s) selected. 
+0

感謝您的答覆。我在表格描述中使用「生成的總是作爲身份不爲空」。我不想在插入後觸發選擇max()查詢的新查詢。插入行時,我需要最新的rowId。插入後應該返回行號。在相同的查詢中。像在mysql中有 KeyHolder keyHolder = new GeneratedKeyHolder(); 其中包含新插入的rowId。 Trafodion有可能嗎? – ankit