SENTENCIAS SQL

6.1. Sentencias Open SQL
      
 6.1.1. Sentencia SELECT
       6.1.2. Sentencia INSERT

6.2.
Sentencias Native SQL

6.3. Sentencias AT

 


 

6.1. SENTENCIAS OPEN SQL:

Se llaman sentencias Open SQL a aquellas propias de Abap/4 que simulan un subconjunto de sentencias SQL (“Structured Query Language”). En general, las sentencias SQL (del tipo que sean) se usan para el acceso a datos en tablas. Las Open SQL tratan tablas de bases de datos (es decir, las tablas del Diccionario de Datos) mientras que las Native SQL tratan tablas internas).

Las sentencias Open SQL son: SELECT (lectura de registros de una tabla), INSERT (inserción de un registro en una tabla), UPDATE (modificación de un registro), OPEN CURSOR (abre un cursor), FETCH (avanza una posición el cursor), CLOSE CURSOR (cierra un cursor), COMMIT WORK (actualiza los últimos cambios de la BD, confirmando que se hacen las modificaciones), ROLLBACK WORK (deshace las modificaciones hechas a la BD volviendo al último checkpoint).

  • 6.1.1. Sentencia SELECT:
    • SELECT [ SINGLE ]campos FROM tabla[ INTO … | APPENDING … ] [ WHERE …][ GROUP BY campos][ ORDER BY criterio].…[ ENDSELECT ].
    • Con SELECT se leen registros de una tabla del Diccionario de Datos (no vale para leer de una tabla interna). La tabla se indica tras FROM. Se pueden especificar los campos a leer (si se desean leer todos los campos de la tabla, poner un ‘*’ como ‘campos’) y si se trata de una lectura individual o múltiple (con SINGLE sólo se lee el primer registro que cumpla los criterios WHERE de búsqueda, acabando el SELECT. En este caso no se debe cerrar éste con ENDSELECT. Y sin SINGLE se leen todas las entradas que concuerden con dichos criterios). Devuelve SY-SUBRC 0 si encuentra algo (y en SY-DBCNT el nº de entradas leídas); y si no, 4. Parámetros:
      • [ SINGLE [ FOR UPDATE ]][DISTINCT] { * | campos | MAX(c) AS m | MIN(c) AS m | AVG(c) AS m | SUM(c) AS m | COUNT(c) AS m | COUNT DISTINCT(c) AS m | COUNT(*) AS m }: Con DISTINCT se excluyen automáticamente las líneas duplicadas. Se puede especificar, en lugar de campos a leer, un parámetro ‘AS’ para que el SELECT simplemente calcule un valor numérico, como el máximo, mínimo, media, suma, … de todas las entradas (numéricas) encontradas.
      • FROM tabla | vista | (tabla) [ CLIENT SPECIFIED ] [ BY PASSING BUFFER ] [ UP TO n ROWS ]: Este ‘parámetro’ es obligatorio. Especifica la tabla de la base de datos a leer. La tabla o vista debe existir en el D.D. y debe estar declarada con TABLES en el programa. Con (tabla) puede especificarse la tabla o vista dinámicamente (aquí ‘tabla’ es una variable). El mandante se especifica con CLIENT SPECIFIED. Con BY PASSING BUFFER se lee directamente de la base de datos sin pasar por el buffer de SAP. Se usa UP TO n ROWS para leer hasta una línea determinada (si n = 0, se leen todas; si n < 0, es un error).
      • APPENDING[ CORRESPONDING FIELDS OF ] TABLE tabla[ PACKAGE SIZE n] Añade (INTO machaca) directamente los registros leídos en la tabla interna especificada.
      • INTO[ CORRESPONDING FIELDS OF ] { field-string | TABLE tabla } [ PACKAGE SIZE n ]: Se usa para indicar al sistema el lugar donde debe dejar el dato leído (en una tabla interna o en un registro), y si guarda todos los campos o bien sólo los iguales en nombre. De esta forma no hace falta moverlos con un MOVE de la tabla de la BD a la tabla interna, basta hacer directamente el APPEND o COLLECT.
      • WHERE campo_BD operador campo: En las cláusulas WHERE se definen los criterios de selección. Serán seleccionadas todas las entradas (si existen) de la tabla que cumplan estos criterios (o sólo la primera si es un SELECT SINGLE). SinWHERE se lee toda la tabla. Primero se escribe siempre el campo de la tabla de la BD (sólo el nombre del campo, sin el nombre de la tabla) y luego el campo o variable con el que se compara. Los operadores pueden ser: EQ, NE, LT, LE, GT, GE, =, <> o bien ><, <, <=, >, >=. Hay otros operadores especiales: [ NOT ] BETWEEN c1 AND c2, [ NOT ] LIKE c [ ESCAPE e ], [ NOT ] IN (c1, …, cn), [ NOT ] IN criterio_selección,IS [ NOT ] NULL (tabla_condiciones).
      • GROUP BY campo1 … campon (tabla): Esta opción permite combinar el contenido de un grupo de entradas de una tabla de la BD, en una única línea. Los campos a agrupar pueden especificarse de forma estática (en tiempo de compilación) o dinámica (en ejecución).
      • ORDER BY[ PRIMARY KEY ] campo1 [ ASCENDING | DESCENDING ] … campon [ ASCENDING | DESCENDING ](tabla): Este parámetro sirve para definir el orden de tratamiento (criterio de ordenación) de las líneas seleccionadas por el SELECT. Con PRIMARY KEY la tabla se ordena por la clave primaria. Se puede ordenar por varios campos, de forma ascendente (por defecto) o descendente. También puede especificarse el criterio de ordenación a través de una tabla (definida con entradas de 72 caracteres máximo. En cada línea de la tabla se especifica un criterio de ordenación).
      Ejemplo:
      
      SELECT * FROM name WHERE campo1 = 'valor1'
                           AND campo2 = 'valor2'.
      
        WRITE: / name-campo1, name-campo2.
      
      ENDSELECT.
                                        
    • INSERT [ INTO ] { tabla | (c) } [ CLIENT SPECIFIED ] [ VALUES field-string | FROMfield-string ] | FROM TABLE tabla_interna[ ACCEPTINGDUPLICATE KEYS ] ].
    • Con INSERT se añaden nuevas entradas a una tabla del Diccionario de Datos (para una tabla interna se haría con APPEND o COLLECT). Dicha tabla puede especificarse de forma directa, con ‘tabla’ (debe estar declarada con TABLES), o indirecta, con ‘(c)’. En ambos casos ésta debe existir en el D.D. Con FROM TABLE inserta en una sola operación todas las entradas de la tabla_interna. Con CLIENT-SPECIFIED se pueden insertar registros en la base de datos sobre otro mandante. El área de trabajo especificada en el field-string de VALUES debe ser tan ancha como el área de trabajo de la tabla de la base de datos. Con la opción ACCEPTING DUPLICATE KEYS, si una línea no puede ser insertada no se aborta la sentencia, aunque sigue devolviendo SY-SUBRC = 4.


6.2. SENTENCIAS NATIVE SQL:

Las sentencias Native SQL a aquellas tomadas directamente tal cual del lenguaje SQL. Todas estas sentencias tratan tablas internas. Son: LOOP, READ TABLE, DESCRIBE TABLE, MODIFY, WRITE TO, DELETE, SORT, CLEAR, REFRESH, FREE.

6.3. SENTENCIAS AT: