Existují způsoby, jak to udělat jednodušší a čistší, ale toto v podstatě vysvětluje techniku:
SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id
UNION ALL
SELECT NULL AS data_name
FROM dual
WHERE NOT EXISTS (
SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id
)
Když je první část sjednocení prázdná, druhá bude obsahovat řádek, když první část není prázdná, druhá nebude obsahovat žádné řádky.
Pokud dotaz trvá příliš dlouho, použijte tento:
SELECT * FROM (
SELECT data_name
FROM data_table
WHERE data_table.type = v_t_id
UNION ALL
SELECT NULL AS data_name
FROM dual
) WHERE data_name is not null or ROWNUM = 1