sql >> Database teknologi >  >> RDS >> Oracle

PreparedStatement er null i Where-sætning uden if-betingede (dynamisk forespørgsel) eller volapyk-værdier

Din arbejdsløsning er fin (og ligner den jeg har brugt før ). Hvis du kun vil binde én gang, kan du bruge en CTE eller inline-visning til at angive værdien til den rigtige forespørgsel:

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

Så der er kun én pladsholder at binde.

Jeg kan dog ikke se noget problem med en gren på Java-siden, medmindre din egentlige forespørgsel er meget mere kompliceret og ville føre til betydelig duplikering.



  1. Forbindelsespooling med PostgreSQL JDBC

  2. Bedste fremgangsmåder til at gemme kreditkortoplysninger i databasen

  3. Konverter DateTime til MySQL ved hjælp af C#

  4. Transaktioner i MySQL - Kan ikke rulle tilbage