En el lenguaje de programación ABAP / 4, se utilizan dos tipos de SQL.
- SQL NATIVO
- ABRIR SQL.
Native SQL le permite utilizar sentencias SQL específicas de la base de datos en un programa ABAP / 4. Esto significa que puede utilizar tablas de base de datos que no están administradas por el diccionario ABAP y, por lo tanto, integrar datos que no forman parte del sistema R / 3.
Open SQL consta de un conjunto de declaraciones ABAP que realizan operaciones en la base de datos central en el sistema R / 3. Los resultados de las operaciones y cualquier mensaje de error son independientes del sistema de base de datos en uso. Por lo tanto, Open SQL proporciona una sintaxis y una semántica uniformes para todos los sistemas de bases de datos compatibles con SAP. Los programas ABAP que solo usan sentencias Open SQL funcionarán en cualquier sistema R / 3, independientemente del sistema de base de datos en uso. Las sentencias SQL abiertas solo pueden funcionar con tablas de bases de datos que se han creado en el diccionario ABAP.
Comandos básicos de SQL abierto
- SELECCIONE
- INSERTAR
- ACTUALIZAR
- MODIFICAR
- ELIMINAR
- CURSOR ABIERTO, FETCH, CURSOR CURSOR
TABLAS SBOOK.CURSOR TIPO DATOS C,WA COMO SBOOK.ABRIR CURSOR C PARA SELECCIONAR * DE SBOOK DONDE CARRID = 'LH'Y CONNID = '0400'Y FLDATE = '19950228'PEDIR POR LLAVE PRIMARIA.HACER.BUSQUE EL SIGUIENTE CURSOR C EN WA.SI SY-SUBRC <> 0.CIERRE CURSOR C.SALIDA.TERMINARA SI.ESCRIBIR: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-FUMADOR, WA-LUGGWEIGHT, WA-WUNIT,WA-FACTURA.ENDDO.
Salida de la lista de pasajeros para el vuelo 0400 de Lufthansa el 28-02.1995:
Códigos de retorno de SQL abiertos
Todas las sentencias Open SQL llenan los siguientes dos campos del sistema con códigos de retorno.SY-SUBRC
Después de cada instrucción Open SQL, el campo del sistema SY-SUBRC contiene el valor 0 si la operación fue exitosa, un valor distinto de 0 si no.
SY-DBCNT
Después de una instrucción Open SQL, el campo del sistema SY-DBCNT contiene el número de líneas de base de datos procesadas.
SQL nativo
Como ya se mencionó, Native SQL le permite utilizar declaraciones SQL específicas de la base de datos en un programa ABAP.Para utilizar la instrucción SQL nativo, debe precederla con la instrucción EXEC SQL y seguirla con la instrucción ENDEXEC.
Sintaxis
EXEC SQL [REALIZANDONo hay ningún período después de las declaraciones de SQL nativo. Además, el uso de comillas (") o un asterisco (*) al principio de una línea en una declaración SQL nativa no introduce un comentario como lo haría en la sintaxis ABAP normal. Necesita saber si los nombres de las tablas y los campos son mayúsculas y minúsculas. sensible en su base de datos elegida.
En las sentencias de SQL nativo, los datos se transportan entre la tabla de la base de datos y el programa ABAP utilizando variables del lenguaje principal. Estos se declaran en el programa ABAP y van precedidos en la instrucción SQL nativo por dos puntos (:). Puede utilizar estructuras elementales como variables del lenguaje principal. Excepcionalmente, las estructuras en una cláusula INTO se tratan como si todos sus campos se enumeraran individualmente.
Como en Open SQL, después de la instrucción ENDEXEC, SY-DBCNT contiene el número de líneas procesadas. En casi todos los casos, SY-SUBRC contiene el valor 0 después de la instrucción ENDEXEC.
SQL abierto: reglas de rendimiento
Para mejorar el rendimiento del SQL y, a su vez, del programa ABAP, se deben tener en cuenta las siguientes reglas:Mantenga el conjunto de resultados pequeño
- Usando la cláusula where
- Si solo se requiere un registro de la base de datos, use SELECT SINGLE siempre que sea posible.
- Restringir el número de líneas
- Si solo se requieren ciertos campos de una tabla, use la instrucción SELECT
INTO… - Restringir el número de columnas
- Usar funciones agregadas
- Evite los bucles de selección anidados
- Una opción alternativa es utilizar la instrucción SELECT ... FOR ALL ENTRIES. Esta declaración a menudo puede ser mucho más eficiente que realizar una gran cantidad de declaraciones SELECT o SELECT SINGLE durante un LOOP de una tabla interna.
- Usar vistas de diccionario
- Use Joins en la cláusula FROM
- Utilice subconsultas en la cláusula where
- Use campos de índice en la cláusula where
- Al acceder a las bases de datos, asegúrese siempre de que se esté utilizando el índice correcto.
- Buffering
- Bases de datos lógicas
- Evite el acceso repetido a la base de datos
- Para evitar ejecutar el mismo SELECT varias veces (y por lo tanto tener selecciones duplicadas), se puede usar una tabla interna de tipo HASHED para mejorar el rendimiento.