Цикл внутри выбора, когда оператор в запросе оракула
Я создал OBJECT_STATUS
вид который работает нормально. Но теперь у меня есть много строк в KPI_DEFINITION
таблица, и я хочу применить цикл для запроса выбора, где EXIST
состояние присутствует, так что я получу все KPI_DEF_ID
с помощью запроса выбора, и я установлю 'N'
, Но не знаю, как это сделать. Можно ли зациклить внутри CASE WHEN
заявление.
CREATE OR REPLACE FORCE VIEW "RATOR_MONITORING"."OBJECT_STATUS" ("OBJECT_TYPE", "OBJECT_ID", "OBJECT_STATUS") AS
select "OBJECT_TYPE"
,"OBJECT_ID"
,"OBJECT_STATUS"
from (select 'EVENT' as object_type
,os.event_id as object_id
,case
when not exists (select kd.kpi_def_id
from rator_monitoring_configuration.kpi_definition kd
where kd.event_id = os.event_id
and kd.kpi_type in (19, 21)) then
'N'
when exists (select kd.kpi_def_id
from rator_monitoring_configuration.kpi_definition kd
where kd.event_id = os.event_id
and kd.kpi_type in (19, 21)
and (kd.kpi_active_initial = 'N' or kd.kpi_active_current = 'N' or
kd.kpi_active_manual = 'N' or kd.kpi_active_downtime = 'N')) then
'N'
else
os.status
end as object_status
from event_status os)
order by object_type
,decode(object_status, 'N', 1, 'R', 2, 'Y', 3, 'G', 4, 5)
,object_id;
1 ответ
Вы должны добавить "поддельный" запрос в "case case".
select object_name,object_type,
case when 1 in (select 1 from dual where EXISTS (select 1 from user_tables tab where tab.table_name = obj.object_name))
then 'IS_TABLE'
when 1 in (select 1 from dual where not EXISTS (select 1 from user_tables tab where tab.table_name = obj.object_name))
then 'NO_TABLE'
else 'END' end case_with_exist
from user_objects obj
where object_type in ('TABLE','INDEX')
;