Oracle从表中选择max id返回null值

时间:2012-01-01 15:57:54

标签: oracle oracle11g max

我有查询:

SELECT MAX(prod_id) FROM products;

如果有记录,则返回最大值。但是,如果我截断表并运行相同的查询,我将无法获得max id。

4 个答案:

答案 0 :(得分:19)

如果您想查询表的列并怀疑max函数可能返回null,那么如果遇到null,则可以返回0

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

如果您提到的列()

没有遇到任何值,则返回至少0

答案 1 :(得分:4)

是的,通过truncating表格删除了其中的所有数据,而不需要commit。因此,表中没有数据,而max什么都没有。

答案 2 :(得分:0)

如果截断表格,表格中不会有任何行。根据定义,Max()在针对空表运行时返回NULL ....或者我在这里错过了什么?

答案 3 :(得分:0)

正如Gerald P. Wright对答案的评论,如果id是由序列生成的,您可以使用它来查找值。 但是

SELECT prod_id_seq.currval FROM DUAL

不起作用,因为currval仅在您使用currval获取值的会话中起作用。

所以,

SELECT prod_id_seq.nextval FROM DUAL

可以为您提供一种解决方法,但它将是一个真正的,真正的BAD解决方案(如果您多次使用此ID,您将获得增量值)。