Ejemplos de coincidencia inexacta de sentencias SQL en perfiles de optimización

Se produce una coincidencia inexacta en los perfiles de optimización si establece el atributo EXACT en false en el código STMTMATCH. A continuación, la sentencia de compilación se compara con las sentencias de un perfil de optimización activo. El compilador coincide con estas sentencias basándose en diferentes reglas de coincidencia predeterminadas y reglas que son específicas de la coincidencia inexacta.

Los ejemplos siguientes muestran dónde la coincidencia inexacta es satisfactoria para las sentencias SQL coincidentes.

Ejemplo 1: Coincidencia inexacta en la cláusula de predicado
Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales para el predicado, pero siguen coincidiendo:
between '07/29/2010' and '08/29/2010' 
between '09/29/2010' and '10/29/2010'

'ab'     like :hv1
'AYYANG' like :hv2

(A=1 AND B=1)       OR (A=2 AND B=2)
(A=:hv1 AND B=:hv2) OR (A=3 AND B=3)

c1 > 0 selectivity 0.1
c1 > 0 selectivity 0.9

c1 = ?
c1 = :hv1 
Ejemplo 2: Coincidencia inexacta en el predicado de lista IN
Todos los fragmentos de sentencia siguientes tienen valores diferentes en el predicado de lista IN, pero siguen coincidiendo:
c1 in (:hv1, :hv2, :hv3);

c1 in (:hv2, :hv3);

c1 in ( ?, ?, ?, ?);

c1 in (c1, c2 );

c1 in (:hv1, :hv2, c1, 1, 2, 3, c2, ?, ?);
Ejemplo 3: Coincidencia inexacta en la lista de selección
El fragmento de sentencia siguiente tiene variables de lenguaje principal diferentes en la lista de selección, pero sigue coincidiendo:
select c1 into :hv1 from t1
select c1 into :hv2 from t1
El fragmento de sentencia siguiente tiene literales diferentes en la lista de selección, pero sigue coincidiendo:
select 1, c1 from t1
select 2, c1 from t1
El fragmento de sentencia siguiente tiene una subconsulta diferente en la lista de selección, pero sigue coincidiendo:
select c1, (select c1 from t1 where c2 = 0) from t1
select c1, (select c1 from t1 where c2 = 5) from t1
El fragmento de sentencia siguiente tiene una expresión diferente en la lista de selección, pero sigue coincidiendo:
select c1 + 1
select c1 + 2
Ejemplo 4: Coincidencia inexacta para cláusulas diferentes
El fragmento de sentencia siguiente tiene filas diferentes para la cláusula optimize, pero sigue coincidiendo:
optimize for 1 row
optimize for 10 row
El fragmento de sentencia siguiente tiene filas diferentes para la cláusula fetch, pero sigue coincidiendo:
fetch first 10 rows only
fetch first 50 rows only
El fragmento de sentencia siguiente tiene un valor literal diferente para la cláusula de tener, pero sigue coincidiendo:
having c1 > 0
having c1 > 10
Cada uno de los siguientes pares de fragmentos de sentencia tienen un posicionamiento de columna diferente para la cláusula order by o tienen valores literales diferentes para la expresión en la cláusula order by, pero siguen coincidiendo:
order by c1+1, c2 + 2, 4
order by c1+2, c2 + 3, 4
Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales o variables de lenguaje principal para la cláusula set, pero siguen coincidiendo:
set c1 = 1
set c1 = 2

set queryno = 2
set queryno = 3

set querytag = 'query1'
set querytag = 'query2'

SET :HV00001 :HI00001 = <subquery>
SET :HV00009 :HI00009 = <subquery>
Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales para la cláusula group by, pero siguen coincidiendo:
group by c1 + 1
group by c1 + 2

group by 1,2,3
group by 3,2,1
Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales para la cláusula de valores, pero siguen coincidiendo:
values 1,2,3
values 3,4,5

values ( 10, 'xml', 'a' )
values ( 20, 'xml', 'ab' )
Ejemplo 5: Coincidencia inexacta para funciones no XML
Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales en la llamada a función, pero tienen el mismo número de literales y siguen coincidiendo:
decimal(c1, 5, 2)
decimal(c1, 9, 3)

Blob('%abc%')
Blob('cde%')

max(1, 100, 200)
max(INFINITY, NAN, SNAN)
Ejemplo 6: Coincidencia inexacta para expresiones especiales
Cada uno de los siguientes pares de fragmentos de sentencia tienen distintos valores literales en mayúsculas o minúsculas cuando la expresión o la expresión mod, pero siguen coincidiendo:
order by mod(c1, 2)
order by mod(c1, 4)

case when b1 < 10 then 'A' else 'B' end 
case when b1 < 20 then 'C' else 'D' end  
Ejemplo 7: Coincidencia inexacta para la función CAST
En Db2® Versión 10.5 Fixpack 3 y fixpacks posteriores, el CAST de un literal, variable del lenguaje principal o marcador de parámetro coincide con sentencias con solo el literal, variable del lenguaje principal o marcador de parámetro sin la función CAST.
CAST( 'a' AS VARCHAR(5) )
CAST( 'b' AS VARCHAR(10) )

CAST( 'a' AS VARCHAR(5) )
'a'

CAST( 'a' AS VARCHAR(5) )
'b'

CAST( :myHostVar AS VARCHAR(5) )
:myHostVar

CAST( C1+1 AS VARCHAR(5) )
C1+2
Ejemplo 8: Coincidencia inexacta para la cláusula ORDER BY
En Db2 Versión 10.5 Fixpack 3 y fixpacks posteriores, los números de columna secuenciales se conservan bajo una cláusula ORDER BY .
ORDER BY C1, UPPER(C2), 3, 1+4
ORDER BY C1, UPPER(C2), 3, 5+6
Ejemplo 9: Coincidencia inexacta para filas duplicadas en una lista VALUES
En Db2 Versión 10.5 Fixpack 3 y fixpacks posteriores, las filas duplicadas de la lista VALUES donde todas las columnas constan de un solo literal, variable del lenguaje principal o marcador de parámetro se eliminan antes de que se compare el texto de la sentencia.
VALUES (1,1,1), (2,2,2), …, (9,9,9)
VALUES (1,2,3)

VALUES (1+1,1,1), (2,2,2), (3,3+3,3), (4,4,4)
VALUES (5+5,5,5), (6,6+6,6)

VALUES (1,2), (C1,1), (2,2), (3,3)
VALUES (C1,4)

VALUES (C1+1,1), (C2+2,2), (3,3)
VALUES (C1+4,4), (C2+5,5)