sql >> Base de Datos >  >> RDS >> Oracle

PreparedStatement es nulo en la cláusula Where sin condicional (consulta dinámica) o valores incomprensibles

Su solución de trabajo está bien (y es similar a lo que he usado antes ). Si solo desea vincular una vez, puede usar un CTE o una vista en línea para proporcionar el valor a la consulta real:

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

Por lo tanto, solo hay un marcador de posición para enlazar.

Sin embargo, realmente no veo ningún problema con una rama en el lado de Java, a menos que su consulta real sea mucho más complicada y conduzca a una duplicación significativa.