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

PreparedStatement ist null in der Where-Klausel ohne if-Bedingungen (dynamische Abfrage) oder Kauderwelsch-Werte

Ihre Arbeitslösung ist in Ordnung (und ähnlich zu dem, was ich zuvor verwendet habe ). ). Wenn Sie nur einmal binden möchten, können Sie eine CTE- oder Inline-Ansicht verwenden, um den Wert für die echte Abfrage bereitzustellen:

WITH CTE AS (
    SELECT ? AS REAL_VALUE FROM DUAL
)
SELECT C.*   -- but not * really, list all the columns
FROM CTE
JOIN CUSTOMERS C
ON (CTE.REAL_VALUE IS NULL AND C.CUSTOMER_ID IS NULL)
    OR C.CUSTOMER_ID = CTE.REAL_VALUE

Es gibt also nur einen Platzhalter zum Binden.

Ich sehe jedoch kein Problem mit einem Zweig auf der Java-Seite, es sei denn, Ihre tatsächliche Abfrage ist viel komplizierter und würde zu einer erheblichen Duplizierung führen.