Oracle выбрать максимальный идентификатор из таблицы возвращает нулевое значение - PullRequest
3 голосов
/ 01 января 2012

У меня есть запрос:

SELECT MAX(prod_id) FROM products;

Возвращает максимальное значение, если есть записи.Но если я усекаю таблицу и выполняю тот же запрос, я не могу получить max id.

Ответы [ 4 ]

19 голосов
/ 03 января 2012

Если вы хотите запросить столбец таблицы и подозревать, что функция max может вернуть ноль, тогда вы можете вернуть 0, если встречается ноль

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

Это вернет как минимум 0, если для столбца, о котором вы упомянули, не найдено никакого значения ()

5 голосов
/ 01 января 2012

Да, путем усечения таблицы, в которой вы удалили все данные в ней, без необходимости commit.Следовательно, в таблице нет данных, а max ничего - ничто.

0 голосов
/ 03 января 2012

Как прокомментировал Джеральд П. Райт ответ, если идентификатор генерируется последовательностью, вы можете использовать его, чтобы найти значение.Но

SELECT prod_id_seq.currval FROM DUAL

не будет работать, потому что currval работает только в сеансе, где вы получили значение с помощью currval.

, поэтому

SELECT prod_id_seq.nextval FROM DUAL

может бытьОбходной путь для вас, но это будет действительно, очень плохое решение (если вы получите идентификатор с этим несколько раз, вы получите увеличенные значения).

0 голосов
/ 01 января 2012

Если вы обрежете таблицу, в ней не останется строк. По определению Max () возвращает NULL при запуске с пустой таблицей .... или я что-то здесь упустил?

...