Vous êtes sur la page 1sur 14

Grupo ASSA

ABAP Open SQL

www.grupoassa.com

Condiciones WHERE
Operadores
La tabla de abajo muestra una lista de operaciones que Open SQL acepta en condiciones
WHERE:
Operador
=, <, >, <=, <=, <>
EQ, LT, GT, LE, GE, NE

Significado y Uso
Comparacin con un solo valor.
Comparacin con una lista de valores individuales

IN (dobj1, dobj2, ...)


Comparacin con un intervalo.
BETWEEN dobj1 AND dobj2
LIKE dobj

Comparacin con cadenas de caracteres. Los


comodines _ y % permiten definir un patrn de
comparacin en dobj. _ reemplaza a un caracter y
% a varios.
Evaluacin de una tabla de seleccin (select-options).

IN seltab
IS [NOT] NULL

Verifica si el campo de la base de datos tiene un valor


null.
Enlazar expresiones lgicas.

AND, OR
Negacin de una expresin lgica.
NOT
El siguiente diagrama muestra un ejemplo de una bsqueda compleja:

www.grupoassa.com

Cuando hay condiciones enlazadas, los operadores AND son evaluados antes que los
operadores OR. Este orden puede ser alterado colocando parntesis.

Comparacin entre campos de tablas


Adems de variables y constantes, tambin se pueden colocar campos de la misma base
de datos luego de los operadores de comparacin (=, <, >, <=, <=, <>,EQ, LT, GT, LE,
GE, NE) .
El diagrama de abajo muestra dos ejemplos:

www.grupoassa.com

Advertencia: Los campos comparados deben tener el mismo tipo bsico y longitud
(idealmente, que estn basados en el mismo dominio).

Sumando y procesando conjuntos de valores


Expresiones de suma
Una expresin de suma (aggregate expression) usa una funcin de suma (aggregate
function) para especificar una columna en la sentencia SELECT. El clculo se realiza en el
sistema de base de datos. ABAP Open SQL soporta las siguientes funciones de suma:
Funcin
MIN( col )

MAX( col )

SUM( col )

AVG( col )

Significado del resultado y


condiciones
Mnimo valor en la columna
col dentro del conjunto de
resultados.
Mximo valor en la columna
col dentro del conjunto de
resultados.
Suma de los contenidos de
la columna col en el
conjunto de resultados. La
columna debe ser numrica.
Valor promedio de los
contenidos de la columna
col en el conjunto de
resultados. La columna

Tipo de datos del resultado


Como la columna col.

Como la columna col.

Como la columna col.

Coma flotante. Float (F).

www.grupoassa.com

debe ser numrica.


COUNT( * )
COUNT(*)

Entero. Integer (I).

Lista de campos con slo expresiones de suma.


Si la lista de campos en una sentencia SELECT contiene solamente expresiones de suma,
el resultado es un solo registro. Una estructura puede ser especificada como el destino
(similar a la sentencia SELECT SINGLE).
El siguiente diagrama muestra un ejemplo:

Lista de campos con expresiones de suma y etiquetas de


campos
Si la lista de campos de un SELECT contiene etiquetas de campos (campos) adems de
expresiones de suma , el resultado es siempre multilnea. En consecuencia, se debe
cargar en una tabla interna o procesarlo secuencialmente (SELECT loop). La sentencia
SELECT debe contener la adicin GROUP BY (agrupar por) y todos los campos que no son
argumentos de una funcin de suma deben ser listados luego de la adicin GROUP BY.

www.grupoassa.com

Cuando la adicin GROUP BY es especificada, la base de datos no aplica las funciones de


suma a todos los registros encontrados juntos, sino que los divide en grupos antes. Cada
grupo contiene todos los registros que tienen el mismo contenido en las columnas
especificadas luego de GROUP BY. Las funciones de suma son evaluadas por separado
para cada uno de estos grupos. Cada grupo corresponde a una lnea del resultado de la
seleccin (ver diagrama anterior, tabla resultado lt_flightocc).
Las siguientes restricciones aplican con la adicin GROUP BY:
Slo columnas individuales son listadas luego de SELECT (SELECT * no est
permitido).
No se puede usar con tablas pooled o cluster.
Los campos luego de GROUP BY no pueden tener tipo STRING o RAWSTRING.
Cuando se usa GROUP BY, se puede especificar una expresin lgica luego de la
expresin HAVING, para restringir ms an los resultados.

www.grupoassa.com

En contraste con la condicin WHERE, la expresin lgica luego de HAVING tambin


puede contener funciones de suma. Adems de las funciones de suma, la expresin
lgica luego de HAVING slo puede contener campos especificados luego de GROUP BY.
Advertencia: Si son usadas etiquetas de campos luego de HAVING que no estn listadas
luego de GROUP BY, esto no causa un error de sintaxis, pero s un error en tiempo de
ejecucin.
Las funciones de suma luego de HAVING pueden ser diferentes de las funciones de suma
luego de SELECT.

Solicitando datos ordenados de la Base de Datos


En Open SQL, se puede hacer que la base de datos ordene los datos por criterios
especficos directamente.
Para lograrlo, se usa la adicin ORDER BY en la sentencia SELECT.

www.grupoassa.com

En su forma ms simple, la adicin ORDER BY PRIMARY KEY, la tabla es ordenada por


su clave primaria completa en orden ascendente. Para usar esta adicin, los siguientes
prerrequisitos deben cumplirse:
La clusula FROM debe contener una nica tabla de base de datos (no views o
joins).
La lista de campos luego de SELECT debe contener todos los campos claves de la
tabla (incluyendo el cliente).
La sintaxis ORDER BY col1 col2 ... ordena los datos por cualquier columna existente. La
secuencia de columnas especificada determina su prioridad de orden. Las siguientes
restricciones aplican:
- Las tablas pooled y cluster no pueden ser ordenadas por cualquier campo.
- Slo se puede ordenar por columnas que aparezcan luego de la sentencia SELECT, lo
que significa que las columnas deben formar parte del conjunto de resultados.
- No se puede ordenar por campos de tipo LCHAR, LRAW, STRING, o RAWSTRING.
El siguiente diagrama muestra un ejemplo de la adicin ORDER BY con eleccin libre de
columnas:

www.grupoassa.com

Si no se usa una adicin, el sistema ordena en orden ascendente. Se pueden usar las
adiciones opcionales DESCENDING y ASCENDING luego de un campo determinado para
definir la direccin del ordenamiento.
Nota: El ordenamiento puede ser un proceso caro (en ciclos y tiempo) para la base de
datos si el resultado es grande y los campos de ordenamiento no coinciden con los
campos usados en el ndice de la base de datos.

Leyendo de mltiples bases de datos


Panorama
Cuando se almacena datos en una base de datos relacional, es normal que cuando
ciertos datos de una base de datos (tabla primaria) son accedidos, registros de otras
bases de datos (tablas secundarias) deban ser ledos tambin.
Un mtodo obvio accede a las tablas secundarias en un loop de los registros de la tabla
primaria. Esta estrategia es llamada SELECTs anidados.

10

www.grupoassa.com

Como puede ser necesario leer datos adicionales para los datos de las tablas
secundarias, no hay lmite a la profundidad del anidamiento.
Por una serie de razones, los SELECTs anidados son el mtodo que ms memoria
consume para leer mltiples bases de datos, y deben ser evitados siempre que sea
posible. Provocan una carga alta en la base de datos y en la red.
En esta leccin, aprender distintas tcnicas que le permitirn evitar por completo los
SELECTs anidados, o al menos reducir su impacto negativo en la performance del
sistema.

Join ABAP y Vistas de Bases de Datos


Para leer datos distribuidos en varias tablas, se debe crear un enlace entre estas. El
correspondiente operador de bases de datos lgicas es llamado JOIN.
Se pueden usar vistas de bases de datos en el Diccionario ABAP o joins ABAP para
implementar un JOIN.
Nota: Las vistas de bases de datos y joins ABAP slo pueden ser usados con tablas
transparentes (no con tablas pooled ni cluster).

11

www.grupoassa.com

Se puede derivar la lgica del INNER JOIN y el OUTER JOIN de los conjuntos de datos que
se pretenden obtener como resultado.
Un INNER JOIN corresponde al resultado que slo considera los registros de la tabla
exterior para los cuales existen registros adecuados en la tabla interior (la de la izquierda
en el ejemplo de arriba).
Un LEFT OUTER JOIN corresponde al resultado que contiene todos los registros de la
tabla exterior, sin considerar si existen registros adecuados en la tabla interior. Si no
existen registros adecuados en la tabla interior, los campos de la tabla exterior en
registros correspondientes a la tabla interior son puestos a cero en el resultado.
Las tablas involucradas en un JOIN son llamadas tablas base. El resultado de un JOIN
puede ser una proyeccin (seleccin de columnas) o una seleccin (seleccin de lneas).
Restricciones para el Outer Join
Slo se puede tener una tabla o una vista a la derecha del operador JOIN, nunca
otra expresin JOIN.
Slo AND puede ser usado como operador lgico en una condicin ON.
Cada comparacin en la condicin ON debe contener un campo de la tabla de la
derecha.

12

www.grupoassa.com

Ninguno de los campos de la tabla de la derecha puede aparecer en las


condiciones WHERE de un LEFT OUTER JOIN.

Atributos y beneficios de las Vistas de Bases de Datos


- Podemos usar vistas en otros programas tambin.
- Hay listas de dnde se usan (where-used lists) y funciones de bsqueda (SE84 / SE81)
para encontrar vistas existentes rpidamente.
- Como con las bases de datos, se pueden crear buffers para las vistas.
- Los campos comunes a ambas tablas (campos join) son transferidos desde la base de
datos al servidor de aplicaciones una sola vez.
- La vista es implementada como un inner join en el Diccionario ABAP. Esto significa que
si la tabla interior no contiene registros que correspondan a la tabla exterior, no son
transferidos datos.

Adicin FOR ALL ENTRIES


Hoy en da, esta tcnica es frecuentemente usada cuando algunos datos ya estn
disponibles en una tabla interna, pero datos adicionales deben ser ledos de la base de

13

www.grupoassa.com

datos. En estos casos, reemplaza a un SELECT SINGLE dentro de un LOOP a la tabla


interna, y suele tener mucha mejor performance que dicho LOOP.
El siguiente diagrama da un ejemplo de cmo funciona la sentencia:

El contenido de la tabla interna (tabla conductora) es usado como una restriccin para el
acceso a la base de datos.
Advertencia: Si usa FOR ALL ENTRIES, tiene que asegurarse de que la tabla interna es
NO vaca. Si la tabla interna est vaca, no provee una condicin lmite a la sentencia
SELECT, y es leda la tabla de base de datos completa. Esto puede causar tiempos de
ejecucin muy largos para la sentencia.
Por otra parte, si se desea leer grandes volmenes de datos, slo en casos excepcionales
se debera usar FOR ALL ENTRIES.

14

www.grupoassa.com

Vous aimerez peut-être aussi