sql >> Database >  >> RDS >> Oracle

PreparedStatement is null in Where-clausule zonder if voorwaardelijke (dynamische query) of wartaalwaarden

Uw werkende oplossing is prima (en vergelijkbaar met wat ik eerder heb gebruikt ). Als u slechts één keer wilt binden, kunt u een CTE of inline-weergave gebruiken om de waarde aan de echte query te geven:

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

Er is dus maar één tijdelijke aanduiding om te binden.

Ik zie echter niet echt een probleem met een branch aan de Java-kant, tenzij je eigenlijke vraag veel gecompliceerder is en tot aanzienlijke duplicatie zou leiden.



  1. RIJ AUTOMATISCH VERWIJDEREN 1 dag na invoeging (MySQL)

  2. Hulp bij prestaties:SUBQUERY vs JOIN

  3. hoe xmltable te gebruiken in orakel?

  4. Hoe de oude records van de laatste 10 minuten van mysql . te tonen