У меня есть такой sql:
SELECT temp.inst_id,
' ',
gv.instance_name,
gv.host_name,
CASE WHEN component IS NULL THEN 'others' ELSE component END
component,
ROUND (SUM (used_mb), 1) used_mb
FROM (SELECT inst_id,
CASE
WHEN name = 'buffer_cache' THEN 'db_buffer_cache'
WHEN name = 'log_buffer' THEN 'log_buffer'
ELSE pool
END
component,
CASE
WHEN name = 'buffer_cache'
THEN
( ( ( bytes
- (SELECT COUNT (*)
FROM gv$bh
WHERE inst_id = x.inst_id
AND status = 'free')
* (SELECT t.VALUE
FROM gv$parameter t
WHERE t.inst_id = x.inst_id
AND t.name = 'db_block_size'))
/ 1024)
/ 1024)
WHEN name != 'free memory'
THEN
( (bytes / 1024) / 1024)
END
used_mb
FROM gv$sgastat x) temp,
gv$instance gv
WHERE gv.inst_id = temp.inst_id
GROUP BY component,
temp.inst_id,
gv.instance_name,
gv.host_name
Вот результат этого запроса:
1 irisdb1 db_buffer_cache 27,6 27,5
1 irisdb1 java pool 0,2
1 irisdb1 large pool 0,2 0,1
1 irisdb1 log_buffer 0,2 0,2
1 irisdb1 shared pool 3,7 3
1 irisdb1 others 0 0
2 irisdb2 db_buffer_cache 27,6 27,4
2 irisdb2 java pool 0,1
2 irisdb2 large pool 0,4 0,2
2 irisdb2 log_buffer 0,2 0,2
2 irisdb2 shared pool 4 3,4
2 irisdb2 others 0 0
Как вы можете видеть в выходных данных, некоторые строки (2-я и 8-я строки) имеют пустое значение в последнем столбце. Я хочу присвоить этим пустым значениям 0
(двойное значение).
3 ответа
Если значение равно NULL
, то вы можете использовать coalesce()
(или несколько других функций) `, чтобы ввести значение:
SELECT temp.inst_id,
' ',
gv.instance_name,
gv.host_name,
CASE WHEN component IS NULL THEN 'others' ELSE component END
component,
COALESE( ROUND (SUM (used_mb), 1), 0.0) used_mb
Вам просто нужно указать значение по умолчанию, если оно равно NULL
:
COALESCE(ROUND (SUM (used_mb), 1),0.0) used_mb
Добавьте предложение ELSE
в оператор CASE
для used_mb
CASE
WHEN name = 'buffer_cache'
THEN
( ( ( bytes
- (SELECT COUNT (*)
FROM gv$bh
WHERE inst_id = x.inst_id
AND status = 'free')
* (SELECT t.VALUE
FROM gv$parameter t
WHERE t.inst_id = x.inst_id
AND t.name = 'db_block_size'))
/ 1024)
/ 1024)
WHEN name != 'free memory'
THEN
( (bytes / 1024) / 1024)
ELSE 0
END
used_mb
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.