2012-01-01 71 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