Ci sono modi per renderlo più semplice e pulito, ma in pratica questo spiega la tecnica:
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
)
Quando la prima parte dell'unione è vuota la seconda conterrà una riga, quando la prima parte non è vuota, la seconda non conterrà righe.
Se la query richiede molto tempo, usa questa:
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