When processing a join
between a SAS data set and a DBMS table, the SAS data set should be
smaller than the DBMS table for optimal performance. However, in the
event that the SAS data set is
larger than
that the DBMS table, the SAS data set will still be used in the IN
clause.
When SAS is processing
a join between two DBMS tables, SELECT COUNT (*) is issued to determine
which table is smaller and if it qualifies for an IN clause.
Currently, the IN clause
has a limit of 4,500 unique values.
Setting the DBKEY=data
set option overrides MULTI_DATASRC_OPT=.
DIRECT_SQL= can impact
this option as well. If DIRECT_SQL=NONE or NOWHERE, the IN clause
cannot be built and passed to the DBMS, regardless of the value of
MULTI_DATASRC_OPT=. These settings for DIRECT_SQL= prevent a WHERE
clause from being passed.
Oracle
Details: Oracle can handle an IN clause of only
1,000 values. Therefore, it divides larger IN clauses into multiple,
smaller IN clauses. The results are combined into a single result
set. For example, if an IN clause contained 4,000 values, Oracle will
produce 4 IN clauses that each contain 1,000 values. A single result
will be produced, as if all 4,000 values were processed as a whole.