✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
1 | El lenguaje SQL
Para manipular los datos de las tablas bases de datos centralizadas de SAP será necesario el uso de SQL. SQL es un lenguaje de scripting enfocado a la comunicación con bases de datos y su subsecuente manipulación. Adicionalmente es capaz de realizar operaciones matemáticas tanto sencillas como complejas.
Hay varias implementaciones propietarias de SQL hechas por diferentes empresas y grupos pero todas tienen que cumplir con los estándares ANSI establecidos para SQL. Por lo tanto, la compatibilidad de programas específicos entre implementaciones usualmente está ausente pero el lenguaje será idéntico (excluyendo por supuesto las partes del lenguaje que hayan sido diseñadas como componentes propietarios).
Las sentencias del lenguaje pueden dividirse en 3 grupos:
Lenguaje de definición de datos (DDL):
Con este manipulamos la estructura de la base de datos. Disponemos de 3 sentencias para hacer esto:
- CREATE: Con esto creamos bases de datos, tablas bases de datos, vistas, etc.
- ALTER: Modifica la estructura de la base de datos, por ejemplo: Puede añadir o borrar columnas en una tabla.
- DROP: Con esta sentencia borramos objetos de la estructura.
Lenguaje de manipulación de datos (DML):
Con este manipulamos los datos dentro de la base de datos. Disponemos de las siguientes sentencias:
- SELECT: Realiza consultas sobre un dato.
- INSERT: Inserta valores.
- UPDATE y MODIFY: Ambas sentencias sirven para realizar modificaciones a uno o más registros.
- DELETE: Elimina registros
Lenguaje de control de datos (DCL):
Con este manipulamos los permisos que los usuarios tienen para interactuar con la base de datos.
- GRANT: Añade permisos.
- REVOKE: Quita permisos.
2 | La sentencia SELECT
Esta es la sentencia que más nos importa de momento. La forma en la que opera se destila en: Buscar elementos en la base de datos; Verificar condiciones (si las hay); Copiarlas en otra variable/estructura para guardarla. Opera con la siguiente sintaxis:
Donde "foo" son los campos a recuperar; "bar" es la tabla que será el origen de los datos; "fu" es donde serán guardados los valores recuperados; "var" es la condición que se utiliza para la recuperación, cabe destacar que por defecto, SELECT intentará recuperar cuantos datos sean posibles y que tanto las condiciones como otras variaciones del select se usan para restringir la selección de datos.
Otra cosa a destacar es que el las secciones FROM y INTO no tienen un orden. Es decir, podemos usar la sentencia INTO antes del FROM y el compilador no tendrá problemas para compilar el programa.
Las variaciones de SELECT son las siguientes:
SELECT * INTO TABLE:
Usando el Wildcard como parámetro de la sentencia SELECT podemos elegir todos los campos. Mientras que el uso de TABLE como cláusula del INTO sirve para especificar el uso de una tabla interna. Si usamos las sentencias descritas y descartamos el WHERE acabaríamos con un select que copia todos los registros de la tabla en una tabla interna.
En caso de que SELECT no encuentre registros a seleccionar SY-SUBRC será diferente a cero. Otra cosa a recordar es de que sería idóneo usar REFRESH o CLEAR cuando sea posible.
SELECT * APPENDING TABLE:
La implementación de SELECT que usa INTO tiene un problema, el cual es de que si la tabla de salida ya tiene registros estos serán pisados. Por lo tanto, se puede adjuntar los resultados de la selección al final de la tabla de salida reemplazando la sentencia "INTO" por "APPENDING" para lograr este resultado.
SELECT [campo específico]:
En caso que queramos seleccionar todos los registros de una columna en particular se tiene que crear una tabla interna auxiliar compuesta exclusivamente del campo que se quiere seleccionar y se la tiene que poner como salida (parámetro del INTO).
Cabe destacar que si queremos realizar el select para varios campos tendremos que poner los campos en el orden en el que aparecen en su tabla base de datos de origen. Adicionalmente, cabe destacar que en el caso de que la variable/tabla de salida no coincida con el formato de los datos de salida del select se considerará como un error de sintaxis o causará más adelante un RTE (dump).
SELECT SINGLE:
En caso que queramos recuperar la primera ocurrencia de un registro que cumpla las condiciones de selección tendremos que poner "SINGLE" entre "SELECT" y las columnas a recuperar.
SELECT INTO CORRESPONDING FIELDS OF TABLE:
Si ambas tablas (entrada y salida) tienen los mismos campos de interés (los que serán seleccionados) se puede realizar una selección independientemente de la estructura de la tabla de entrada (pero respetando el orden de la tabla de salida). Esto lo hacemos usando la cláusula "CORRESPONDING FIELDS OF TABLE" para la sentencia "INTO".
SELECT...WHERE IN:
"IN" es la sentencia que usamos para especificar que el parámetro que tiene detrás tiene que estar en el rango de valores establecido por el parámetro que el "IN" tiene adelante, el cual debería haber sido establecido a través de un select-options.
SELECT MAX:
Se utiliza para buscar el registro con el máximo valor para una columna específica. Para usarlo usamos la sintaxis SELECT MAX(foo). Donde "foo" es el campo en el que se buscará el mayor valor. Idóneamente se lo usará en conjunto con la cláusula SINGLE.
SELECT COUNT:
Si usamos el "COUNT" luego del SELECT la selección generará como salida un entero el cual será la cantidad de registros que cumplen con las condiciones establecidas.
SELECT FOR ALL ENTRIES IN:
Esta sentencia se pone antes del WHERE junto a una tabla interna como parámetro. Su propósito es permitirnos comparar la tabla base de datos con la tabla interna durante las operaciones lógicas dentro del WHERE.
SELECT...LIKE:
Esta es una de las expresiones que se puede usar dentro del WHERE para buscar patrones de texto. La sintaxis sería WHERE foo LIKE bar. Donde "foo" es el campo de la tabla interna a comprar y "bar" es el patrón de texto a buscar. Recordemos que se puede usar "%" al inicio o al final del texto.
SELECT...INNER JOIN:
Este es similar al FOR ALL ENTRIES IN. Aunque el uso es mucho más específico, este lo usamos para crear registros en una tabla de salida compuesta por campos de dos tablas diferentes basadas en el cumplimiento de condiciones a declarar. Tengamos en cuenta que es necesario crear una tabla interna que sea compatible con ambas tablas.
 
 
 
Sobre el autor
Publicación académica de Mauricio Javier Solis Ibañez, en su ámbito de estudios para la Carrera Consultor ABAP.
Mauricio Javier Solis Ibañez
Profesión: Técnico Electrónico - Argentina - Legajo: CF20Z
✒️Autor de: 28 Publicaciones Académicas
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Certificación Académica de Mauricio Solis