Está en la página 1de 15

[Año]

DOCUMENTACIÓN – LECTURAS EN BASE DE


DATOS

Curso – ABAP Open SQL


LOGALISAP
1

Contents
1. Sintaxis .................................................................................................................................................................3
2. Efecto....................................................................................................................................................................3
3. Comportamiento de las variables de sistema ...................................................................................................4
4. Notas ....................................................................................................................................................................5
5. SELECT – result .....................................................................................................................................................6
5.1. Sintaxis .........................................................................................................................................................6
5.2. Efecto ...........................................................................................................................................................6
6. SELECT - FROM .....................................................................................................................................................6
6.1. Sintaxis .........................................................................................................................................................6
6.2. Efecto ...........................................................................................................................................................7
6.3. Alternativas .................................................................................................................................................7
7. SELECT – INTO ......................................................................................................................................................7
7.1. Sintaxis .........................................................................................................................................................7
7.2. Efecto ...........................................................................................................................................................7
7.3. Notas............................................................................................................................................................8
8. SELECT – WHERE ..................................................................................................................................................9
8.1. Sintaxis .........................................................................................................................................................9
8.2. Efecto ...........................................................................................................................................................9
8.3. Notas............................................................................................................................................................9
9. SELECT – GROUP BY.......................................................................................................................................... 10
9.1. Sintaxis ...................................................................................................................................................... 10
9.2. Efecto ........................................................................................................................................................ 11
9.3. Nota de seguridad.................................................................................................................................... 11
10. SELECT – HAVING ......................................................................................................................................... 12
10.1. Sintaxis ...................................................................................................................................................... 12
10.2. Efecto ........................................................................................................................................................ 12
11. SELECT – ORDER BY ...................................................................................................................................... 13
11.1. Sintaxis ...................................................................................................................................................... 13
11.2. Alternativas .............................................................................................................................................. 13
11.3. Efecto ........................................................................................................................................................ 13
12. ENDSELECT.................................................................................................................................................... 14
12.1. Sintaxis ...................................................................................................................................................... 14

ABAP Open SQL logalisap.com


2

12.2. Efecto ........................................................................................................................................................ 14

ABAP Open SQL logalisap.com


3

1. Sintaxis

SELECT result
FROM source
INTO|APPENDING target
[[FOR ALL ENTRIES IN itab] WHERE sql_cond]
[GROUP BY group] [HAVING group_cond]
[ORDER BY sort_key].
...
[ENDSELECT].

2. Efecto

SELECT es la instrucción Open SQL utilizada para leer registros de una o más
tablas de base de datos en objetos de datos.

La instrucción SELECT lee un conjunto de resultados (cuya estructura se


determina en resultado) de las tablas de base de datos especificadas en el
origen y asigna los datos del conjunto de resultados a los objetos de datos
especificados en el destino. Se puede restringir el conjunto de resultados
mediante la adición WHERE. La agrupación GROUP BY fusiona varias filas de
la base de datos en una fila del conjunto de resultados. La adición HAVING
restringe las filas combinadas. La orden ORDER BY ordena el conjunto de
resultados.

Los objetos de datos especificados en el destino deben corresponder al


resultado del conjunto de resultados. Esto significa que el conjunto de
resultados se asigna a los objetos de datos en un paso, o por filas o
paquetes de filas.

Si se utiliza la adición PACKAGE SIZE la sentencia SELECT abre un bucle, que


debe cerrarse con ENDSELECT. En cada iteración de bucle, la instrucción
SELECT asigna una fila o un paquete de filas a los objetos de datos
especificados en el destino. Si se ha asignado la última fila o el conjunto de

ABAP Open SQL logalisap.com


4

resultados está vacío, SELECT salta a ENDSELECT. Un cursor de base de


datos se abre implícitamente para procesar un bucle SELECT, y se cierra de
nuevo cuando el bucle ha terminado. Puede salir del bucle utilizando las
mismas instrucciones que se utilizan para salir de los bucles LOOP. Si el
conjunto de resultados totales se pasa al objeto de datos en un solo paso,
no se abre un bucle y no se puede especificar la sentencia ENDSELECT.

Con la excepción de las adiciones INTO y APPENDING, las entradas de la


sentencia SELECT especifican qué datos deben ser leídos por la base de
datos y en qué forma. Este requisito se implementa en la interfaz de la base
de datos para la interfaz de programación del sistema de base de datos y
luego se pasa al sistema de base de datos. Los datos se leen en paquetes
desde la base de datos y se transportan desde el servidor de base de datos
al servidor de aplicaciones actual. En el servidor de aplicaciones, los datos
se pasan a los objetos de datos del programa ABAP de acuerdo con los
ajustes especificados en las adiciones INTO y APPENDING.

3. Comportamiento de las variables de sistema

La instrucción SELECT establece los valores de las variables del sistema


SY-SUBRC y SY-DBCNT.

• SY-SUBRC:
- 0 La sentencia SELECT establece SY-SUBRC en 0 para cada valor pasado a
un objeto de datos ABAP. La sentencia SELECT también establece
SY-SUBRC en 0 antes de que salga de un bucle SELECT con ENDSELECT si
se pasó al menos una fila.
- 4 La instrucción SELECT establece SY-SUBRC en 4 si el conjunto de
resultados está vacío, es decir, si no se encontraron datos en la base de
datos. Se aplican reglas especiales cuando sólo se utilizan expresiones
agregadas en el resultado.
- 8 La instrucción SELECT establece SY-SUBRC en 8 si se utiliza la adición
FOR UPDATE en resultado y la clave primaria no se especifica
completamente después del WHERE.

ABAP Open SQL logalisap.com


5

• SY-DBCNT
- Después de cada valor que se pasa a un objeto de datos ABAP, la
sentencia SELECT establece en el valor de la variable del sistema SY-
DBCNT el número de filas pasadas. Si se produce un desbordamiento
porque el número o filas es mayor que 2,147,483,647, SY-DBCNT se
establece en -1. Si el conjunto de resultados está vacío, SY-DBCNT se
establece en 0. Al igual que con Sy-SUBRC, se aplican reglas especiales si
sólo se utilizan expresiones agregadas en el resultado.

4. Notas

• Aunque la condición WHERE es opcional, por razones de rendimiento,


debe especificarla siempre y el conjunto de resultados no debe estar
restringido en la capa de aplicación.

• Los bucles SELECT se pueden anidar. Por razones de rendimiento, debe


comprobar si sería más eficiente utilizar un JOIN o un Subquery
(Subconsulta).

• Dentro de un bucle SELECT, no puede ejecutar ninguna instrucción que


conduzca a un commit de base de datos o a un rollback de base de datos,
haciendo que el cursor de base de datos correspondiente se cierre como
resultado.

• La sentencia ENDSELECT cierra todos los flujos lectores que están


asociados con el SELECT

ABAP Open SQL logalisap.com


6

5. SELECT – result

5.1. Sintaxis

... lines columns ...

5.2. Efecto

Los datos en el “result” consisten en datos de filas para “lines” y de


columnas para ”columns”.

Los datos en el resultado definen si el conjunto resultante consta de


varias filas (estructura similar a una tabla) o una sola fila (estructura
plana). Especifica las columnas a leer y define sus nombres en el
conjunto resultante. Tenga en cuenta que los nombres de las
columnas de la tabla de base de datos se pueden cambiar. Para
columnas individuales, las expresiones agregadas se pueden usar
para especificar agregados. Las filas idénticas en el conjunto
resultante pueden ser excluidas, y las filas individuales pueden ser
protegidas de cambios paralelos por otro programa.

6. SELECT - FROM

6.1. Sintaxis

... FROM { {dbtab [AS tabalias]}


| join
| {(dbtab_syntax) [AS tabalias]} }
[CLIENT SPECIFIED]
[UP TO n ROWS]
[BYPASSING BUFFER]
[CONNECTION con|(con_syntax)] ... .

ABAP Open SQL logalisap.com


7

6.2. Efecto

Las entradas en origen especifican si se accede a una tabla de base


de datos, una vista o varias tablas o vistas de base de datos mediante
una expresión de unión. Las adiciones opcionales realizan el manejo
del cliente, especifican si el almacenamiento intermedio de SAP se
omite y determinan el número máximo de filas a leer.

6.3. Alternativas

... join

Especifica una expresión de unión que une varias tablas de base de


datos o vistas entre sí.

7. SELECT – INTO

7.1. Sintaxis

... { INTO
{ {[CORRESPONDING FIELDS OF] wa}|(dobj1, dobj2, ...)} }
| { INTO|APPENDING
[CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n] }
[ creating ] ...

7.2. Efecto

INTO específica a qué objetos de datos se asigna el conjunto de


resultados de una instrucción SELECT o FETCH. Se puede especificar
un solo área de trabajo wa o una lista de objetos de datos dobj1,
dobj2, ... después de INTO, o se puede especificar una tabla interna
itab después de INTO o APPENDING.

ABAP Open SQL logalisap.com


8

7.3. Notas

• En temas de rendimiento los datos deben ser mejor leídos en una


tabla interna o un área de trabajo dependiendo del tipo de
procesamiento posterior: Si los datos se requieren sólo una vez en un
programa, se debe importar en un área de trabajo, fila por fila. Leer
datos en una tabla interna requiere más espacio de memoria (sin la
desventaja) debido a una velocidad de lectura considerablemente
más alta. Si, por otro lado, los datos se requieren muchas veces en un
programa, se debe leer en una tabla interna. La desventaja del
requerimiento de memoria incrementado es más que compensado
aquí por la ventaja de una selección única.

• Si se van a importar datos en una tabla interna, es mejor


importarlos una vez dentro de una tabla interna que colocarlos, fila
por fila, en un área de trabajo y finalmente agregarlos a una tabla
interna usando APPEND.

• Las variantes con la adición INTO CORRESPONDING FIELDS


requieren un tiempo de ejecución mayor que las variantes
correspondientes sin INTO CORRESPONDING FIELDS, sin embargo, el
tiempo de ejecución es menos dependiente del volumen.

• Las variantes con la adición INTO CORRESPONDING FIELDS corren el


riesgo de tener áreas de trabajo wa con más componentes que los
que realmente se llenan. Esto sólo debería ser el caso si los
componentes que no están llenos se llenan en el programa. De lo
contrario, deben utilizarse áreas de trabajo de tamaño adecuado
para evitar que se llene una gran cantidad de memoria por los
valores iniciales (especialmente en las tablas internas).

ABAP Open SQL logalisap.com


9

8. SELECT – WHERE

8.1. Sintaxis

... [FOR ALL ENTRIES IN itab] WHERE sql_cond ...

8.2. Efecto

La adición WHERE restringe el número de líneas incluidas en el


conjunto de resultados por la sentencia SELECT, utilizando una
expresión lógica sql_cond. La expresión lógica compara el contenido
de las columnas de la base de datos con el contenido de los objetos
de datos ABAP o con el contenido de otras columnas. La adición
opcional FOR ALL ENTRIES puede utilizarse para comparar el
contenido de una columna en la base de datos con un componente
con todas las líneas de una tabla interna estructurada itab.

La expresión lógica sql_cond es verdadera, falsa o desconocida. La


expresión es desconocida si una de las columnas implicadas en la
base de datos contiene un valor nulo y se evalúa con otra
comparación como IS NULL. Una fila sólo se incluye en el conjunto de
resultados si la expresión lógica es verdadera.

Excepto para las columnas del tipo STRING o RAWSTRING más LCHR
o LRAW, todas las columnas de las tablas de la base de datos o vistas
listadas después de FROM pueden ser evaluadas después de la
condición WHERE. Las columnas no necesariamente tienen que ser
una parte del conjunto de resultados.

8.3. Notas

El ID del mandante no se puede consultar en la condición WHERE, si


la gestión automática del mandante no se desactiva mediante la
adición CLIENT SPECIFIED después de FROM. Esto suele probarse

ABAP Open SQL logalisap.com


10

mediante la comprobación de sintaxis. Si se consulta el ID del


mandante en la condición WHERE y no se especifica CLIENT
SPECIFIED (lo que a veces ocurre cuando se utilizan nombres de tabla
alternativos, en combinaciones y cuando se especifica
dinámicamente), la gestión automática del mandante no se
desactiva. En este caso, hay dos condiciones para la columna de
cliente: la condición implícita del controlador del mandante
automático para el mandante actual y la condición explícitamente
especificada. Si el mandante actual no se especifica en la condición
explícitamente especificada, el conjunto de resultados está vacío.
• Las expresiones lógicas de la condición WHERE también se pueden
utilizar después de la adición HAVING y a veces en la condición ON de
una expresión de unión JOIN después de la adición FROM.

• Si se accede a la tabla de la base de datos con un almacenamiento


intermedio SAP genérico, el área almacenada en el búfer debe
especificarse completamente en la condición WHERE, de lo contrario
se ignorará el búfer.

• Si se accede a las tablas de la base de datos mediante el


almacenamiento en búfer de registros individuales, se deben incluir
las condiciones del JOIN utilizando AND en la condición WHERE para
todos los campos clave de la clave principal, de lo contrario se
ignorará el almacenamiento en búfer.

9. SELECT – GROUP BY

9.1. Sintaxis

... GROUP BY { {col1 col2 ...} | (column_syntax) } ...

ABAP Open SQL logalisap.com


11

9.2. Efecto

La adición GROUP BY combina grupos de filas que tienen el mismo


contenido en sus columnas especificadas col1 col2 ... en el conjunto
resultante en una sola fila.

El uso de GROUP BY tiene el requisito previo de que selecciona sólo


las columnas individuales, no todas las columnas. Si se utiliza GROUP
BY, todas las columnas que se especifican directamente después de
SELECT y no se especifican como un argumento de una función
agregada deben estar listadas allí. Esto significa que las columnas que
no se enumeran después de GROUP BY sólo se pueden enumerar
después de SELECT como el argumento de una función agregada. Las
funciones de agregación definen cómo se determina el contenido de
estas columnas en la fila combinada a partir del contenido de todas
las filas de un grupo.

Después de GROUP BY, los mismos identificadores de columna deben


especificarse como después de SELECT. Esto se puede especificar
estáticamente como una lista col1 col2 ... o dinámicamente como un
objeto de datos entre paréntesis column_syntax que, cuando se
ejecuta la sentencia, contiene la sintaxis de la especificación estática
o es inicial. Para column_syntax, lo mismo se aplica a especificar
columnas dinámicamente después de SELECT.

Las columnas especificadas después de GROUP BY no pueden ser del


tipo STRING o RAWSTRING.

9.3. Nota de seguridad

Si se usan incorrectamente, las técnicas de programación dinámica


pueden presentar un serio riesgo de seguridad. Cualquier contenido
dinámico que se pasa a un programa desde el exterior se debe
comprobar a fondo antes de ser utilizado en las declaraciones

ABAP Open SQL logalisap.com


12

dinámicas. Esto puede hacerse utilizando la clase de sistema


CL_ABAP_DYN_PRG.

10. SELECT – HAVING

10.1. Sintaxis

... HAVING sql_cond ...

10.2. Efecto

La adición HAVING limita el número de filas agrupadas en el conjunto


de resultados utilizando la expresión lógica sql_cond en estas filas. La
sintaxis de la expresión lógica sql_cond coincide con la sintaxis de la
expresión lógica sql_cond de la condición WHERE. Las comparaciones
de la expresión lógica evalúan el contenido de los grupos de filas.

Si las filas se agrupan utilizando la adición GROUP BY, todas las


columnas que se especifican directamente en la condición sql_cond
con su nombre col se enumeran después de GROUP BY. Especificar
una columna diferente aumenta directamente la excepción
manejable CX_SY_OPEN_SQL_DB. Para cualquier columna de las
tablas de la base de datos o las vistas que aparecen después de
FROM, cualquier expresión de agregación se puede especificar en las
tablas de la base de datos listada en las comparaciones de sql_cond.
Este tipo de expresión agregada se evalúa para cada grupo de filas
definido en GROUP BY y su resultado se utiliza como un operando en
la comparación. Si, al mismo tiempo, una columna de este tipo
también aparece como un argumento de una función agregada
después de SELECT, las expresiones agregadas después de SELECT y
después de HAVING pueden ser diferentes.

ABAP Open SQL logalisap.com


13

11. SELECT – ORDER BY

11.1. Sintaxis

... ORDER BY { {PRIMARY KEY}


| { {col1|a1} [ASCENDING|DESCENDING]
{col2|a2} [ASCENDING|DESCENDING] ...}
| (column_syntax) } ...

11.2. Alternativas

• ... ORDER BY PRIMARY KEY

• ... ORDER BY {col1|a1} [ASCENDING|DESCENDING]


{col2|a2} [ASCENDING|DESCENDING] ...

• ... ORDER BY (column_syntax)

11.3. Efecto

ORDER BY ordena el resultado de multilíneas por el contenido de la


columna especificada. El orden de las filas en el conjunto de
resultados se refiere a todas las columnas que no se enumeran
después de ORDER BY, es indefinida y puede ser diferente en
ejecuciones repetidas de la misma instrucción SELECT.

Las siguientes restricciones se aplican cuando se utiliza la adición


ORDER BY con otras adiciones:

• Si la adición FOR ALL ENTRIES se utiliza en la condición WHERE,


ORDER BY sólo se puede utilizar con la adición PRIMARY KEY y todas
las columnas de la clave primaria deben aparecer después de SELECT.

• La adición ORDER BY no se puede utilizar con la adición SINGLE.

ABAP Open SQL logalisap.com


14

• Si las funciones agregadas se especifican después de SELECT, todas


las columnas que se enumeran después de ORDER BY y que no tienen
un nombre de columna alternativo para una función de agregación
también se deben especificar después de SELECT y después de
GROUP BY.

• Si utiliza un nombre alternativo para ordenar, este nombre debe


ser único y no puede tener el mismo nombre que una columna que
no tiene nombres alternativos.

• Si se utiliza DISTINCT sólo se pueden especificar en las columnas


después de ORDER BY las que también aparecen después de SELECT.
Si no es así, también se pueden usar otras columnas, siempre y
cuando no haya restricciones por otras adiciones como GROUP BY.

12. ENDSELECT

12.1. Sintaxis

ENDSELECT.

12.2. Efecto

La instrucción ENDSELECT cierra un bucle iniciado con SELECT.

ABAP Open SQL logalisap.com

También podría gustarte