NULLIF, как правильно установить его в этом запросе - PullRequest
0 голосов
/ 11 марта 2020

Я использую следующий запрос, чтобы сразу получить представление об использовании табличных пространств:

db2 "select substr(tbsp_name,1,30) as Tablespace_Name, tbsp_type as Type, substr(tbsp_state,1,20) as Status, (tbsp_total_size_kb / 1024 ) as Size_Meg, smallint((float(tbsp_free_size_kb)/ float(tbsp_total_size_kb))*100) as Percent_Free_Space, int((tbsp_free_size_kb) / 1024 )as Meg_Free_Space from sysibmadm.tbsp_utilization where smallint((float(tbsp_free_size_kb)/ float(tbsp_total_size_kb))*100) < 20 order by Percent_Free_Space"

однако я застрял со следующей ошибкой:

SQL0801N Деление на ноль был предпринят SQLSTATE = 22012

Я понимаю, что вы можете исправить эту ошибку с помощью NULLIF, однако я не могу найти правильный способ установки в запросе, спасибо за помощь.

(с использованием «DB2 v9.7.0.11», «s150922», «IP23937» и Fix Pack «11»)

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Попробуйте это:

smallint (float (tbsp_free_size_kb) / float ( nullif (tbsp_total_size_kb, 0) ) * 100)

0 голосов
/ 11 марта 2020

Возможно, вам следует использовать регистр:

CASE WHEN tbsp_total_size_kb=0 THEN NULL ELSE (tbsp_total_size_kb / 1024 ) END as Size_Meg

, если tbsp_total_size_kb может быть нулевым IFNULL, например:

CASE WHEN IFNULL(tbsp_total_size_kb,0)=0 THEN NULL ELSE (tbsp_total_size_kb / 1024 ) END as Size_Meg
...