public class FlexibleSearchUtils
extends java.lang.Object
| Constructor and Description |
|---|
FlexibleSearchUtils() |
| Modifier and Type | Method and Description |
|---|---|
static java.lang.String |
buildOracleCompatibleCollectionStatement(java.lang.String expression,
java.lang.String parameter,
java.lang.String expressionOperator,
java.util.Collection originalParameters,
java.util.Map<java.lang.String,java.lang.Object> paramsMap)
Builds oracle-proof collection conditions which respect the 1000 element limit for expressions in oracle.
|
public static java.lang.String buildOracleCompatibleCollectionStatement(java.lang.String expression,
java.lang.String parameter,
java.lang.String expressionOperator,
java.util.Collection originalParameters,
java.util.Map<java.lang.String,java.lang.Object> paramsMap)
{pk} IN ( ?coll )
: This works fine on oracle provided that not more than 1000 elements are inside the collection. Otherwise you'll
get the well known ORA-01795 error.
Using this method would work like this:
Collection params = ...
Map queryParams = new HashMap();
String query = "SELECT {PK} FROM {FOO} WHERE ";
query += FlexibleSearchUtils.buildOracleCompatibleCollectionStatement( "{code} IN (?coll)","coll", "OR", params, queryParams );
Finally you'd end up with conditions like this:
( {code} IN (?coll0) ) OR ( {code} IN (?coll1) OR ... )
which is accepted by oracle.
Another example with different connection operator
Collection params = ...
Map queryParams = new HashMap();
String query = "SELECT {PK} FROM {FOO} WHERE ";
query += FlexibleSearchUtils.buildOracleCompatibleCollectionStatement( "{code} NOT IN (?coll)","coll", "AND", params, queryParams );
will end in
( {code} NOT IN (?coll0) ) AND ( {code} NOT IN (?coll1) OR ... )
expression - the condition containing the collection parameterparameter - the collection parameter alias (without '?')expressionOperator - the operator to be used in case the expression needs to be split uporiginalParameters - the original parameter value collectionparamsMap - the FlexibleSearch parameter map to add the parameter value collection(s) toCopyright © 2018 SAP SE. All Rights Reserved.