Vaše pracovní řešení je v pořádku (a podobné tomu, co jsem použil dříve ). Pokud chcete svázat pouze jednou, můžete použít CTE nebo vložené zobrazení k poskytnutí hodnoty skutečnému dotazu:
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
Existuje tedy pouze jeden zástupný symbol pro vazbu.
Ve skutečnosti však nevidím problém s větví na straně Java, pokud váš skutečný dotaz není mnohem komplikovanější a vedl by k významné duplicitě.