我有查询:
SELECT MAX(prod_id) FROM products;
如果有记录,则返回最大值。但是,如果我截断表并运行相同的查询,我将无法获得max
id。
答案 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,您将获得增量值)。