Declaraciones en línea

Desde la versión 7.40, SP08 podemos utilzar declaraciones en línea con el operador de declaración DATA (…)

  • Sintaxis

SELECT field1, field2, …
  FROM database_table
INTO TABLE @DATA(internal_table)…
SELECT SINGLE field1, field2, …
FROM database_table
INTO @DATA(structure)…

  • Efecto

Una expresión de declaración con el operador de declaración DATA declara una variable utilizada como un operando en la posición de escritura actual. La variable declarada es visible estáticamente en el programa desde la ubicación DATA(var) y es válida en el contexto actual. La declaración se realiza cuando se compila el programa, independientemente de si la declaración se ejecuta realmente.
La tabla interna del primer SELECT declarada con @DATA(internal_table) va a tener como componentes de su línea las columnas a seleccionar: field1, field2, etc. del mismo tipo que las columnas de base de datos.
En el segundo SELECT se declara una estructura que va a contener como componentes las columnas: field1, field2, etc.

  • Notas

Una declaración en línea de una variable generalmente puede interpretarse como una forma abreviada de una declaración de declaración utilizada como un prefijo directo. Las excepciones a esta regla ocurren solo si se usa un objeto de datos con un nombre idéntico de un contexto más global en la misma declaración.

  • Caso práctico

Primero veamos cómo se leía sin la declaración en línea en una tabla interna las columnas MATNR, LAEDA y MEINS. Para tener una tabla interna con las tres columnas necesitamos una estructura definida en el diccionario de datos o un tipo local y en base a esto se puede realizar la declaración de la tabla interna. El siguiente código realiza esta lógica:
TYPES: BEGIN OF gty_materials,
matnr TYPE matnr,
laeda TYPE laeda,
meins TYPE meins,
END OF  gty_materials.
DATA gt_materials TYPE STANDARD TABLE OF gty_materials.
SELECT matnr laeda meins
FROM mara
INTO TABLE gt_materials
UP TO 5 ROWS.
 
En cambio, con la declaración en línea no necesitamos crear el tipo local y tampoco declarar la tabla interna.
SELECT matnr, laeda, meins
FROM mara
INTO TABLE @DATA(gt_materials)
UP TO 5 ROWS.
Las dos implementaciones devuelven el mismo resultado. Con la declaración en línea @DATA tenemos un código mucho más sencillo y fácil de implementar.
 
 

2 comentarios de “Declaraciones en línea

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Suscríbete al blog
Recibe las últimas actualizaciones y contenidos exclusivos directamente en tú correo electrónico.
Inscribime
close-link