Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :obtenir une requête pour toujours renvoyer exactement une ligne, même lorsqu'il n'y a pas de données à trouver

Il existe des moyens de rendre cela plus simple et plus propre, mais ceci explique essentiellement la technique :

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
)

Lorsque la première partie de l'union est vide, la seconde contiendra une ligne, lorsque la première partie n'est pas vide, la seconde ne contiendra aucune ligne.

Si la requête prend trop de temps, utilisez celle-ci :

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