これをよりシンプルでクリーンにする方法はありますが、これは基本的にテクニックを詳しく説明しています:
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
)
ユニオンの最初の部分が空の場合、2番目の部分には行が含まれ、最初の部分が空でない場合、2番目の部分には行が含まれません。
クエリに時間がかかる場合は、次のクエリを使用してください:
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