Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Lassen Sie eine Abfrage immer genau eine Zeile zurückgeben, auch wenn keine Daten zu finden sind

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