Hay formas de hacer esto más simple y limpio, pero esto básicamente explica la técnica:
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
)
Cuando la primera parte de la unión está vacía, la segunda contendrá una fila, cuando la primera parte no esté vacía, la segunda no contendrá filas.
Si la consulta lleva mucho tiempo, utilice esta:
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