Existem maneiras de tornar isso mais simples e limpo, mas isso basicamente explica a 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
)
Quando a primeira parte da união estiver vazia, a segunda conterá uma linha, quando a primeira parte não estiver vazia, a segunda não conterá nenhuma linha.
Se a consulta demorar muito, use 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