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

PreparedStatement est nul dans la clause Where sans if conditionnel (requête dynamique) ou valeurs charabia

Votre solution de travail est bonne (et similaire à ce que j'ai utilisé auparavant ). Si vous ne souhaitez lier qu'une seule fois, vous pouvez utiliser une vue CTE ou intégrée pour fournir la valeur à la vraie requête :

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

Il n'y a donc qu'un seul espace réservé à lier.

Cependant, je ne vois pas vraiment de problème avec une branche du côté Java, à moins que votre requête réelle ne soit beaucoup plus compliquée et n'entraîne une duplication importante.