Abrir SQL y SQL nativo en SAP ABAP

El objetivo de este tutorial no es enseñarte. SQL o base de datos concepts pero para 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 esté utilizando el sistema R/3.

SQL nativo le permite utilizar declaraciones SQL específicas de la base de datos en un programa ABAP/4. Esto significa que puede utilizar tablas de bases 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 sentencias ABAP que realizan operaciones en la base de datos central del sistema R/3. Los resultados de la operaLas instrucciones y los mensajes de error son independientes del sistema de base de datos en uso. Open SQL proporciona así una sintaxis y una semántica uniformes para todos los sistemas de bases de datos soportados por SAP. Los programas ABAP que sólo utilizan sentencias Open SQL funcionarán en cualquier sistema R/3, independientemente del sistema de base de datos que se utilice. Las sentencias de Open SQL solo pueden funcionar con tablas de bases de datos que se hayan creado en el diccionario ABAP.

Comandos SQL abiertos básicos

  • SELECCIONAR
  • INSERT
  • ACTUALIZAR
  • MODIFICAR
  • BORRAR
  • ABRIR CURSOR, BUSCAR, CERRAR CURSOR

Ejemplo

TABLES SBOOK.

DATA C TYPE CURSOR,

WA LIKE SBOOK.

OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH '

AND CONNID = '0400'

AND FLDATE = '19950228'

ORDER BY PRIMARY KEY.

DO.

FETCH NEXT CURSOR C INTO WA.

IF SY-SUBRC <> 0.

CLOSE CURSOR C.

EXIT.

ENDIF.

WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,

WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,

WA-INVOICE.

ENDDO.

Genere la lista de pasajeros del vuelo 0400 de Lufthansa del 28-02.1995:

Abrir códigos de retorno SQL

Todas las declaraciones de Open SQL llenan el siguientewing 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 el operaLa operación fue exitosa, un valor distinto de 0 en caso contrario.

SY-DBCNT

Después de una declaració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ó, SQL nativo le permite utilizar declaraciones SQL específicas de la base de datos en un programa ABAP.

Para utilizar una declaración SQL nativa, debe precederla con la declaración EXEC SQL y seguirla con la declaración ENDEXEC.

Sintaxis

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

No hay ningún punto después de las declaraciones SQL nativas. 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 tablas y campos distinguen entre mayúsculas y minúsculas en su elección. base de datos.

En las declaraciones SQL nativas, los datos se transportan entre la tabla de la base de datos y el programa ABAP mediante variables del lenguaje principal. Estos se declaran en el programa ABAP y están precedidos en la declaración SQL nativa por dos puntos (:). Puede utilizar estructuras elementales como variables del lenguaje principal. Excepcionalmente, las estructuras de una cláusula INTO se tratan como si todos sus campos estuvieran enumerados individualmente.

Como en Open SQL, después de la declaració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 declaración ENDEXEC.

Open SQL – Reglas de rendimiento

Para mejorar el rendimiento del SQL y a su vez del programa ABAP se debe cuidar lo siguientewing reglas-

Mantenga el conjunto de resultados pequeño

  • Usando la cláusula donde
  • 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

Minimizar 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 BUCLE de una tabla interna.
  • Usar vistas de diccionario
  • Utilice combinaciones en la cláusula FROM
  • Utilice subconsultas en la cláusula donde

Minimizar los gastos generales de búsqueda

  • Utilice campos de índice en la cláusula donde
  • Al acceder a 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 Buffer Archivos

  • 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.