2012-01-01 92 views
3

我有查詢:甲骨文選擇最多的ID從表返回空值

SELECT MAX(prod_id) FROM products; 

它返回,如果有記錄的最大價值。但是,如果我截斷表並運行相同的查詢,我無法獲得max ID。

+0

有沒有什麼辦法可以獲得最大ID如果我截斷表 – user367134 2012-01-01 16:55:21

+1

如果你刪除表中的所有數據,那麼**絕對沒有辦法從表**中獲取任何數據。所以不行。在下面看到兩個答案。我在我的答案中提供了一個到'truncate'文檔的鏈接,所以如果你需要更多關於'truncate'對你的表格有什麼作用的信息,你可以閱讀它。 – Ben 2012-01-01 17:00:24

回答

0

如果您截斷表格,表格中沒有剩餘的行。根據定義,Max()在空表上運行時返回NULL ...或者我在這裏錯過了什麼?

+1

我在想...如果prod_id是一個定義的序列,那麼 SELECT prod_id.currval FROM DUAL 將得到您最後使用的數字,也可能是最大取決於序列是如何定義。 – 2012-01-01 18:31:37

4

是的,通過truncating該表格已刪除其中的所有數據,不需要commit。因此表中沒有數據,沒有什麼是沒有數據的。

16

如果你要查詢表的列和懷疑max函數可能返回null,那麼您可以在情況下返回null 0遇到

SELECT NVL(MAX(P.PROD_ID), 0) AS MAX_VAL 
FROM PRODUCTS P 

這將至少返回0,如果沒有價值遇到您提到的列()

+0

這對我有用,謝謝 – 2017-04-21 06:36:59

0

由於Gerald P. Wright對一個答案進行了評論,如果id是由序列生成的,則可以使用它來查找該值。 但

SELECT prod_id_seq.currval FROM DUAL 

將無法​​正常工作,因爲工作CURRVAL只有在你獲取與CURRVAL值會話。

所以,

SELECT prod_id_seq.nextval FROM DUAL 

可以爲你的解決辦法,但會是一個真的,真的不好解決(如果你的ID有幾次,你會得到增加值)。

+0

如果還取決於序列的緩存。 – Ben 2012-01-03 20:57:48