Има начини да направите това по-просто и по-чисто, но това основно изяснява техниката:
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
)
Когато първата част на обединението е празна, втората ще съдържа ред, когато първата част не е празна, втората няма да съдържа редове.
Ако заявката отнема твърде много време, използвайте тази:
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