Es gibt Möglichkeiten, dies einfacher und sauberer zu machen, aber dies erklärt im Grunde die Technik:
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
)
Wenn der erste Teil der Union leer ist, enthält der zweite eine Zeile, wenn der erste Teil nicht leer ist, enthält der zweite keine Zeilen.
Wenn die Abfrage zu lange dauert, verwenden Sie diese hier:
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