Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle:Obter uma consulta para sempre retornar exatamente uma linha, mesmo quando não há dados a serem encontrados


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