Abra SQL y SQL nativo en SAP ABAP

โšก Resumen inteligente

Open SQL y SQL nativo en SAP ABAP describe las dos formas en que un programa ABAP accede a la base de datos. Open SQL trabaja con tablas de diccionario de forma independiente de la base de datos, mientras que Native SQL transmite sentencias especรญficas de la base de datos directamente a la plataforma.

  • ๐Ÿงญ Distinciรณn fundamental: Open SQL se refiere a las tablas declaradas en el Diccionario ABAP, y Native SQL se refiere a las tablas que el diccionario no administra.
  • ๐Ÿงฑ Principio de portabilidad: Open SQL proporciona una sintaxis, semรกntica y mensajes de error uniformes, por lo que un programa se ejecuta sin cambios en todas las bases de datos compatibles con SAP.
  • โŒจ๏ธ Conjunto de comandos: Las sentencias SELECT, INSERT, UPDATE, MODIFY, DELETE y las sentencias de cursor cubren todas las operaciones de Open SQL en la base de datos central.
  • ๐Ÿ”ข Devoluciones Codes: SY-SUBRC informa del รฉxito con el valor 0, y SY-DBCNT informa del nรบmero de lรญneas de la base de datos procesadas.
  • ???? Interfaz SQL nativa: Las instrucciones se encuentran entre EXEC SQL y ENDEXEC, no llevan punto final e intercambian datos a travรฉs de variables de host precedidas por dos puntos.
  • ๐Ÿš€ Disciplina de desempeรฑo: Mantenga el conjunto de resultados pequeรฑo, restrinja los campos, evite los bucles SELECT anidados, utilice campos de รญndice y almacene los registros en una tabla interna con hash.

Open SQL y SQL nativo en SAP ABAP

ยฟQuรฉ son Open SQL y Native SQL?

El objetivo de este tutorial no es enseรฑarte. SQL o conceptos de bases de datos, sino 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 consiste en un conjunto de instrucciones ABAP que realizan operaciones en la base de datos central del sistema R/3. Los resultados de las operaciones 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 base de datos compatibles con SAPLos programas ABAP que solo utilizan instrucciones Open SQL funcionarรกn en cualquier sistema R/3, independientemente del sistema de base de datos que se utilice. Las instrucciones Open SQL solo pueden funcionar con tablas de base de datos que se hayan creado en el diccionario ABAP.

Open SQL es la opciรณn predeterminada en casi todos los programas, por lo que su conjunto de comandos se abordarรก en primer lugar.

Comandos SQL abiertos bรกsicos

  • SELECT
  • 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:

Cada una de estas afirmaciones informa su resultado a travรฉs de dos campos del sistema, que se describen a continuaciรณn.

Devoluciรณn SQL abierta Codes

Todas las declaraciones de Open SQL llenan los siguientes dos campos del sistema con cรณdigos de retorno.

Campo del sistema Significado
SY-SUBRC Despuรฉs de cada declaraciรณn Open SQL, el campo de sistema SY-SUBRC contiene el valor 0 si la operaciรณn fue exitosa, y un valor distinto de 0 si no lo fue.
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.

๐Ÿ’ก Consejo: Compruebe siempre SY-SUBRC inmediatamente despuรฉs de la instrucciรณn. Un comando ABAP posterior sobrescribe el campo y se pierde el resultado original.

Cuando una tabla se encuentra fuera del Diccionario ABAP, Open SQL no puede acceder a ella y se utiliza SQL nativo.

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 de CRISPR Medicine News.

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.

โš ๏ธ Advertencia: El SQL nativo omite el SAP El bรบfer de tabla y el manejo automรกtico del cliente de Open SQL. El programa debe proporcionar el campo del cliente, y la instrucciรณn solo se ejecuta en la plataforma de base de datos para la que fue escrita.

Open SQL frente a SQL nativo: diferencias clave

Ambas interfaces acceden a la misma base de datos, pero difieren en portabilidad, almacenamiento en bรบfer y los objetos que pueden gestionar. La siguiente tabla resume las diferencias prรกcticas.

Criterios Open SQL SQL nativo
Tablas abordadas Solo tablas declaradas en el Diccionario ABAP Cualquier tabla de la base de datos, incluidas las tablas que no estรกn en el diccionario.
Portabilidad Se ejecuta en todas las bases de datos compatibles con SAP Vinculado a la sintaxis de una plataforma de base de datos.
Sintaxis Sentencias ABAP con un perรญodo de cierre Las instrucciones nativas se encuentran entre EXEC SQL โ€ฆ ENDEXEC, sin punto de cierre.
transferencia de datos รreas de trabajo y mesas internas a travรฉs de INTO Variables de host precedidas por dos puntos.
Gestiรณn de clientes y almacenamiento en bรบfer Gestiรณn automรกtica de clientes y almacenamiento en bรบfer de tablas. No hay gestiรณn automรกtica de clientes y el SAP El bรบfer se omite
Uso tรญpico Acceso diario a los datos de la aplicaciรณn R/3 Integraciรณn de datos que no forman parte del sistema R/3.

Por lo tanto, Open SQL es la opciรณn predeterminada, y las reglas que se detallan a continuaciรณn garantizan su rapidez.

Open SQL โ€“ 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 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

  • Bufferinsights
  • Bases de datos lรณgicas
  • Evite el acceso repetido a la base de datos

Uso de tablas internas para Buffer rรฉcords

  • Para evitar ejecutar la misma SELECT varias veces (y por lo tanto tener selecciones duplicadas), mesa interna Se puede utilizar el tipo HASHED para mejorar el rendimiento.

Preguntas Frecuentes

Normalmente no. El SQL nativo omite el SAP La tabla utiliza un bรบfer, por lo que una lectura de Open SQL con bรบfer suele ser mรกs rรกpida. El SQL nativo solo resulta ventajoso cuando se necesita una funciรณn especรญfica de la plataforma que Open SQL no ofrece.

Sรญ. Open SQL agrega automรกticamente el cliente actual a la clรกusula WHERE de una tabla dependiente del cliente. SQL nativo no lo hace, por lo que el programa debe proporcionar MANDT para evitar leer datos de clientes externos.

Un bucle anidado envรญa una llamada a la base de datos por cada registro de la tabla externa, lo que multiplica los viajes de ida y vuelta de la red. Una uniรณn, una vista de diccionario o una consulta SELECT โ€ฆ FOR ALL ENTRIES recuperan los mismos datos en una sola llamada.

Sรญ. Los asistentes de IA en las herramientas de desarrollo ABAP detectan bucles SELECT anidados, condiciones WHERE faltantes y columnas no utilizadas, y luego proponen una sentencia reescrita. La sugerencia aรบn requiere una verificaciรณn en tiempo de ejecuciรณn en la transacciรณn ST05 o SAT.

Los escรกneres de IA identifican cada bloque EXEC SQL, explican la sintaxis especรญfica de la plataforma que contiene y generan una instrucciรณn Open SQL equivalente. Un desarrollador confirma que las tablas del diccionario existen y prueba el resultado antes del transporte.

Resumir este post con: