Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sentencias SQL
1. Declaración de datos
REPORT zhr_utilitarios.
TABLES: zhrtt_empleados.
*Declarando Tablas Internas
DATA: gti_empleados TYPE TABLE OF zhrtt_empleados.
DATA: gti_edades TYPE TABLE OF zhrtt_empleados.
*Declarando un work area
DATA: gwa_empleados LIKE LINE OF gti_empleados.
DATA: gwa_edades LIKE LINE OF gti_edades.
*Solo para el caso de INNER JOIN
*Declaramos una estructura
DATA: BEGIN OF ges_ordenes,
trkorr TYPE e070-trkorr,
as4date TYPE e070-as4date,
as4time TYPE e070-as4time,
object TYPE e071-object,
NOMBRE TYPE e071-obj_NAME,
END OF ges_ordenes.
*Declarando Tablas Internas
DATA: gti_ordenes LIKE TABLE OF ges_ordenes.
*Creamos una estructura
DATA: ges_ordenes2 LIKE ges_ordenes.
2. SELECT parte 1
START-OF-SELECTION.
SELECT *
FROM zhrtt_empleados.
WRITE:/ zhrtt_empleados-id_empleado, zhrtt_empleados-
nombre_empleado.
ENDSELECT.
SKIP.
ULINE.
SELECT apellid_empleado
FROM zhrtt_empleados
INTO zhrtt_empleados-apellid_empleado.
WRITE:/ zhrtt_empleados-apellid_empleado.
ENDSELECT.
SKIP.
ULINE.
SELECT SINGLE apellid_empleado
FROM zhrtt_empleados
INTO zhrtt_empleados-apellid_empleado.
WRITE:/ zhrtt_empleados-apellid_empleado.
SKIP.
ULINE.
*Obtengo la edad máxima de los registros de una tabla
SELECT MAX( edad_empleado )
FROM zhrtt_empleados
INTO zhrtt_empleados-edad_empleado.
WRITE:/ zhrtt_empleados-edad_empleado.
SKIP.
ULINE.
*Obtengo la edad mínima de los registros de una tabla
SELECT MIN( edad_empleado )
FROM zhrtt_empleados
INTO zhrtt_empleados-edad_empleado.
WRITE:/ zhrtt_empleados-edad_empleado.
SKIP.
ULINE.
3. SELECT parte 2
*Los campos seleccionados deben ser iguales
*a los campos de la tabla interna
SELECT *
FROM zhrtt_empleados
INTO TABLE gti_empleados.
*La tabla interna no debe tener necesariamente los mismos
*campos identicos a los que seran seleccionados
SELECT *
FROM zhrtt_empleados
INTO CORRESPONDING FIELDS OF TABLE gti_empleados.
*Los campos seleccionados se agregarán a los registros
*ya existentes en la tabla interna
SELECT *
FROM zhrtt_empleados
APPENDING TABLE gti_empleados.
*Los campos seleccionados se se guardarán en
*la tabla interna teniendo en cuenta condiciónes
SELECT *
FROM zhrtt_empleados
INTO TABLE gti_empleados
WHERE edad_empleado >= 20
AND apellid_empleado = 'ZELADA SILVA'.
4. SELECT parte 3 (FOR ALL ENTRIES IN, WHERE, GROUP BY, HAVING, ORDER BY)
*Cargamos datos a la tabla interna gti_edades
gwa_edades-edad_empleado = 57.
APPEND gwa_edades TO gti_edades.
gwa_edades-edad_empleado = 25.
APPEND gwa_edades TO gti_edades.
*Los campos seleccionados que se agregarán en
*la tabla interna deben estar en la otra tabla interna
*las tablas internaqs involucradas las relacionaremos
*mediante algunos campos usando la sentencia Where
SELECT *
FROM zhrtt_empleados
INTO TABLE gti_empleados
FOR ALL ENTRIES IN gti_edades
WHERE edad_empleado EQ gti_edades-edad_empleado.
*Los campos seleccionados se se guardarán en
*la tabla interna teniendo en cuenta la condición de agrupación
*group by y la condición Having
SELECT sexo_empleado
FROM zhrtt_empleados
INTO CORRESPONDING FIELDS OF TABLE gti_empleados
GROUP BY sexo_empleado
HAVING sexo_empleado EQ 'M'.
*Los campos seleccionados se se guardarán en
*la tabla interna teniendo en cuenta un orden
*utilizando el order by
SELECT nombre_empleado apellid_empleado edad_empleado sexo_empleado
FROM zhrtt_empleados
INTO CORRESPONDING FIELDS OF TABLE gti_empleados
ORDER BY edad_empleado ASCENDING.
*Mostrando datos
LOOP AT gti_empleados INTO gwa_empleados.
WRITE:/ gwa_empleados-nombre_empleado,
gwa_empleados-apellid_empleado,
gwa_empleados-edad_empleado,
gwa_empleados-sexo_empleado.
ENDLOOP.
SKIP.
ULINE.
5. INSERT
*Insertar datos en una tabla Z
gwa_empleados-id_empleado = '0010'.
gwa_empleados-nombre_empleado = 'JONAS'.
gwa_empleados-apellid_empleado = 'IPARRAGIRRE LÓPEZ'.
gwa_empleados-edad_empleado = 55.
gwa_empleados-sexo_empleado = 'M'.
gwa_empleados-sueldo_empleado = 10000.
*Permite insertar datos a una tabla Z
*a partir de una estructura
INSERT INTO zhrtt_empleados VALUES gwa_empleados.
*Permite insertar datos a una tabla Z
*a partir de una estructura
INSERT zhrtt_empleados FROM gwa_empleados.
*Permite insertar datos de una estructura a una
*tabla interna al igual que APPEND gwa_empleados TO
*gti_empleados
INSERT gwa_empleados INTO TABLE gti_empleados.
*Permite insertar datos a una tabla Z
*a partir de una tabla interna
INSERT zhrtt_empleados FROM TABLE gti_empleados.
IF sy-subrc IS INITIAL.
WRITE:/ 'Se registró con éxito'.
ELSE.
WRITE:/ 'No se registró con éxito'.
ENDIF.
6. UPDATE
*Modificar datos en una tabla Z
gwa_empleados-id_empleado = '0009'.
gwa_empleados-nombre_empleado = 'LUISA'.
gwa_empleados-apellid_empleado = 'NEIRA ROCAS'.
gwa_empleados-edad_empleado = 35.
gwa_empleados-sexo_empleado = 'F'.
gwa_empleados-sueldo_empleado = 10000.
*Actualizar registros teniendo en cuenta condiciones
UPDATE zhrtt_empleados SET nombre_empleado = 'LUISA2' WHERE id_empl
eado = '0009'.
*Actualizar registros a partir de una estructura
UPDATE zhrtt_empleados FROM gwa_empleados.
*Insertar registro en tabla interna
APPEND gwa_empleados TO gti_empleados.
*Actualizar registros a partir de una tabla interna
UPDATE zhrtt_empleados FROM TABLE gti_empleados.
IF sy-subrc IS INITIAL.
WRITE:/ 'Se modificó con éxito'.
ELSE.
WRITE:/ 'No se modificó con éxito'.
ENDIF.
7. DELETE
*Eliminar datos en una tabla Z
gwa_empleados-id_empleado = '0009'.
gwa_empleados-nombre_empleado = 'LUISA'.
gwa_empleados-apellid_empleado = 'NEIRA ROCAS'.
gwa_empleados-edad_empleado = 35.
gwa_empleados-sexo_empleado = 'F'.
gwa_empleados-sueldo_empleado = 10000.
*Eliminar registros de una tabla z teniendo en cuenta condiciones
DELETE FROM zhrtt_empleados WHERE id_empleado = '0009'.
*Eliminar registros de una tabla z desde una estructura
DELETE zhrtt_empleados FROM gwa_empleados.
*Insertar registro en tabla interna
APPEND gwa_empleados TO gti_empleados.
*Eliminar registro de una tabla z desde una tabla interna
DELETE zhrtt_empleados FROM TABLE gti_empleados.
IF sy-subrc IS INITIAL.
WRITE:/ 'Se eliminó con éxito'.
ELSE.
WRITE:/ 'No se eliminó con éxito'.
ENDIF.
*Eliminar datos en una tabla Z
gwa_empleados-id_empleado = '0009'.
gwa_empleados-nombre_empleado = 'LUISA'.
gwa_empleados-apellid_empleado = 'NEIRA ROCAS'.
gwa_empleados-edad_empleado = 35.
gwa_empleados-sexo_empleado = 'F'.
gwa_empleados-sueldo_empleado = 10000.
*Eliminar registros de una tabla z desde una estructura
DELETE zhrtt_empleados FROM gwa_empleados.
*Permite volver el regitro eliminado anteriormente
*a su estado inicial
ROLLBACK WORK.
*Eliminar datos en una tabla Z
gwa_empleados-id_empleado = '0009'.
gwa_empleados-nombre_empleado = 'LUISA'.
gwa_empleados-apellid_empleado = 'NEIRA ROCAS'.
gwa_empleados-edad_empleado = 35.
gwa_empleados-sexo_empleado = 'F'.
gwa_empleados-sueldo_empleado = 10000.
*Eliminar registros de una tabla z desde una estructura
DELETE zhrtt_empleados FROM gwa_empleados.
*Permite asegurar la ejecución anteriormente realizada
*Esta sentencia siempre esta por defecto al ejecutar
*una instrucción, por lo cual no es necesario ponerla
COMMIT WORK.
IF sy-subrc IS INITIAL.
WRITE:/ 'Se eliminó con éxito'.
ELSE.
WRITE:/ 'No se eliminó con éxito'.
ENDIF.
SKIP.
SELECT a~trkorr a~as4date a~as4time b~object b~obj_name
FROM e070 AS a
INNER JOIN e071 AS b ON a~trkorr = b~trkorr
INTO TABLE gti_ordenes
UP TO 10 ROWS
WHERE a~trkorr LIKE 'SAPKD%'
AND b~object EQ 'PROG'.
LOOP AT gti_ordenes INTO ges_ordenes.
MOVE ges_ordenes TO ges_ordenes2.
WRITE:/ ges_ordenes2-trkorr, '|',ges_ordenes2-as4date, '|',
ges_ordenes2-as4time, '|',ges_ordenes2-object,'|',
ges_ordenes2-nombre.
ENDLOOP.
LOOP AT gti_ordenes INTO ges_ordenes.
MOVE ges_ordenes TO ges_ordenes2.
WRITE:/ ges_ordenes2-trkorr, '|',ges_ordenes2-as4date, '|',
ges_ordenes2-as4time, '|',ges_ordenes2-object,'|',
ges_ordenes2-nombre.
ENDLOOP.
12. SQL IN
- Definición de Datos
REPORT zhr_utilitarios.
TABLES: zhrtt_empleados, e070.
*Declarando Tablas Internas
DATA: gti_empleados TYPE TABLE OF zhrtt_empleados.
*Declaramos una estructura
DATA: ges_empleados LIKE LINE OF gti_empleados.
- Pantalla de selección
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_id_emp FOR zhrtt_empleados-id_empleado.
SELECTION-SCREEN END OF BLOCK b1.
- Código de ejemplo
START-OF-SELECTION.
"Permite restringir los registros en la consulta
*A partir de una tabla interna o select-option
SELECT *
FROM zhrtt_empleados
INTO TABLE gti_empleados
WHERE id_empleado IN s_id_emp.
*Recorremos la tabla de empleados consultada
LOOP AT gti_empleados INTO ges_empleados.
WRITE:/ ges_empleados-id_empleado, '|',ges_empleados-
nombre_empleado, '|',
ges_empleados-edad_empleado, '|',ges_empleados-
sexo_empleado,'|',
ges_empleados-moneda_empleado.
ENDLOOP.
*Declaramos una estructura de la tabla interna del select-
option
DATA: les_id_emp LIKE LINE OF s_id_emp.
*Recorremos la tabla interna del select-option
LOOP AT s_id_emp INTO les_id_emp.
WRITE:/ les_id_emp-sign, les_id_emp-option, les_id_emp-low, le
s_id_emp-high.
ENDLOOP.
"Permite restringir los registros en la consulta
*Indicando los valores que se quiere restringir o aceptar
SELECT *
FROM zhrtt_empleados
INTO TABLE gti_empleados
WHERE id_empleado IN ('0001','0008').
*Recorremos la tabla de empleados consultada
LOOP AT gti_empleados INTO ges_empleados.
WRITE:/ ges_empleados-id_empleado, '|',ges_empleados-
nombre_empleado, '|',
ges_empleados-edad_empleado, '|',ges_empleados-
sexo_empleado,'|',
ges_empleados-moneda_empleado.
ENDLOOP.
START-OF-SELECTION.
"Permite obtener registros distintos, dependiendo
*del campo señalado en la consulta
SELECT DISTINCT apellid_empleado
FROM zhrtt_empleados
INTO CORRESPONDING FIELDS OF TABLE gti_empleados.
*Recorremos la tabla de empleados consultada
LOOP AT gti_empleados INTO ges_empleados.
WRITE:/ ges_empleados-apellid_empleado.
ENDLOOP.
- La definición de variables
REPORT zhr_utilitarios.
TABLES: zhrtt_empleados.
*Declarando Tablas Internas
DATA: gti_empleados TYPE TABLE OF zhrtt_empleados.
*Declaramos una estructura
DATA: ges_empleados LIKE LINE OF gti_empleados.
*Declarando variales
DATA: gv_cant_registros TYPE i.
DATA: gv_max_sueldo LIKE ges_empleados-sueldo_empleado.
DATA: gv_min_sueldo LIKE ges_empleados-sueldo_empleado.
DATA: gv_avg_sueldo LIKE ges_empleados-sueldo_empleado.
DATA: gv_sum_sueldo LIKE ges_empleados-sueldo_empleado.
START-OF-SELECTION.
*Limpiamos las variables creadas
CLEAR: gv_cant_registros, gv_max_sueldo, gv_min_sueldo, gv_avg_s
ueldo, gv_sum_sueldo.
*Obtenemos la cantidad de registros, Máximo, Mínimo, Porcentaje
y Sumatoria
SELECT COUNT(*) MAX( sueldo_empleado ) MIN( sueldo_empleado )
AVG( sueldo_empleado ) SUM( sueldo_empleado )
FROM zhrtt_empleados
INTO (gv_cant_registros,
gv_max_sueldo,
gv_min_sueldo,
gv_avg_sueldo,
gv_sum_sueldo).
*Mostramos resultados
WRITE:/ 'La tabla tiene: ', gv_cant_registros, 'Registros'.
WRITE:/ 'El máximo es: ', gv_max_sueldo.
WRITE:/ 'El mínimo es: ', gv_min_sueldo.
WRITE:/ 'El promedio es: ', gv_avg_sueldo.
WRITE:/ 'La sumatoria es: ', gv_sum_sueldo.