Abrir SQL & SQL nativo en SAP ABAP

El objetivo de este tutorial no es enseñarle conceptos de SQL o bases de datos, sino presentarle la diversidad de SQL en ABAP.

En el lenguaje de programación ABAP / 4, se utilizan dos tipos de SQL.

  1. SQL NATIVO
  2. ABRIR SQL.
Open SQL le permite acceder a las tablas de la base de datos declaradas en el diccionario ABAP independientemente de la plataforma de base de datos que utilice el sistema R / 3.

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
Ejemplo
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 [REALIZANDO 
].ENDEXEC.
No 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.
Minimizar la cantidad de datos transferidos
  • 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
Minimice la cantidad de transferencias de datos
  • 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
Minimizar la sobrecarga de búsqueda
  • 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.
Reducir la carga de la base de datos
  • Buffering
  • Bases de datos lógicas
  • Evite el acceso repetido a la base de datos
Uso de tablas internas para almacenar registros
  • 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.

Articulos interesantes...