🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP El lenguaje SQL y la sentencia SELECT

ABAP El lenguaje SQL y la sentencia SELECT

ABAP El lenguaje SQL y la sentencia SELECT

SENTENCIA SELECT...ENDSELE

Esta sentencia realiza una lectura lineal de los datos de las tablas de la base de datos y los asigna directamente a los campos de nuestra tabla interna. Pero atención, para que queden almacenados sobre la tabla interna para cada registro seleccionado debemos utilizar la sentencia APPEND. Así, haremos añadiremos los registros a nuestra tabla interna.
SELECT * FROM sflight WHERE carrid IN s_carrid. i_vuelos-carrid = sflight-carrid. i_vuelos-connid = sflight-connid. i_vuelos-fldate = sflight-fldate. i_vuelos-planetype = sflight-planetype. APPEND i_vuelos. CLEAR i_vuelos. ENDSELECT.
  • El símbolo (*) le indica a SAP que debe guardar en memoria absolutamente todos los valores de todos los campos de cada registro de la tabla SAP.
  • La cláusula WHERE nos permite indicar el filtro de selección. En este caso utilizamos como filtro el rango de códigos de aerolíneas. De la tabla sflight sólo recuperaremos aquellos registros que cumplan con la condición indicada en el WHERE.
  • Seguidamente asignamos a cada campo de la tabla interna el valor del campo de la tabla SAP, dejándolo a nivel de la cabecera de la tabla interna.
  • Finalmente, guardamos el registro en nuesta tabla interna mediante la sentencia APPEND.
    Con la sentencia CLEAR limpiamos la cabecera y la dejamos lista para el siguiente registro.

La sentencia SELECT...ENDSELECT irá pasando uno a uno por cada uno de los registros que cumplan la condición de la cláusula WHERE y los irá almacenando gracias a la sentencia APPEND dentro de nuestra tabla interna.
El mayor inconveniente de trabajar con la forma SELECT...ENDSELECT es que la lectura se hace linealmente, es decir, SAP debe pasar por cada uno de los registros individualmente hasta llegar al final. Esto hace que la búsqueda de datos sea muy ineficiente en términos de rendimiento y alarga innecesariamente el tiempo de ejecución del programa.
Una forma de mejorar el rendimiento sería no utilizar la cláusula (*) sino indicar específicamente los campos que necesitamos llenar.
SELECT carrid connid fldate planetype FROM sflight INTO (i_vuelos-carrid, i_vuelos-connid, i_vuelos-fldate, i_vuelos-planetype) WHERE carrid IN s_carrid. APPEND i_vuelos. CLEAR i_vuelos. ENDSELECT.
Al no usar todos los campos mejoramos el rendimiento y con la cláusulo INTO asignamos directamente el valor al campo de la tabla interna.
Otra forma de sentencia select.
Existe otra forma de la sentencia SELECT mucho más eficiente nos permite almacenar los datos en la tabla interna sin necesidad de utilizar la sentencia APPEND. El mismo efecto que en el caso anterior lo obtendríamos usando...
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE i_vuelos WHERE carrid IN s_carrid.
  • Seguimos utilizando el valor (*) para leer todos los campos.
  • La claúsula INTO CORRESPONDING FIELDS OF TABLE compara el nombre del campo de la tabla de SAP con cada nombre de la tabla interna. Si encuentra coincidencia le asigna su valor correspondiente. Por eso, es tan importante que el nombre de los campos de una tabla interna sean iguales al nombre de los campos de una tabla SAP. De lo contrario, esta forma no se puede utilizar.
    Se mantiene la cláusula WHERE.
  • Se elimina la sentencia APPEND ya que la lectura deja de ser secuencial sino en bloques. Es decir, SAP ya no tiene que recorrer uno a uno todos los registros, sino que toma el bloque de registros que coinciden con la condición determinada a través de la cláusula WHERE y lo asigna en bloque a la tabla interna.

Y aún, otra variación que podemos utilizar sería:
SELECT carrid connid fldate planetype FROM sflight INTO TABLE i_vuelos WHERE carrid IN s_carrid.
Esta forma es todavía más eficiente ya que:
  • Evita el uso de (*) y en su lugar sólo toma el valor de los campos que nos interesa (carrid, connid, fldate y planetype).
  • La cláusula INTO TABLE asigna estos cuatro campos a los cuatro primeros campos de la tabla interna. Así que, cuidado, el orden en que se hayan declarado estos campos en la tabla interna es importante. Aquí no hay asignación por nombre de campo, sino por posición, el valor del campo carrid de la tabla sflight se asignará al primer campo de la tabla interna, el valor del campo connid de la tabla sflight se asignará al segundo campo de la tabla interna, y así sucesivamente. Aquí ya no es tan importante el nombre de los campos de la tabla interna, pero sí la longitud y el tipo de esos campos. Si no lo tenemos cuenta nuestro programa acabar abruptamente con dump breve.
La sentencia select para recuperar registros individualmente.
Finalmente, otra forma que se utiliza mucho, es la sentencia SELECT SINGLE.
SELECT SINGLE * FROM sflight WHERE connid = p_connid.
Se utiliza si lo que nos interesa es únicamente un registro de nuestra tabla de base de datos. En en el ejemplo, me interesa un número de vuelo en concreto y utilizo la sentencia SELECT con la cláusula SINGLE. Es muy habitual que después de escribir esta sentencia se escriba una condición del tipo IF sy-subrc ... ENDIF.
SELECT SINGLE * FROM sflight WHERE connid = p_connid. IF sy-subrc = 0. i_vuelos-connid = sflight-connid. APPEND i_vuelos. CLEAR i_vuelos. ENDIF.
El campo sy-subrc es un campo de sistema y si el resultado es 0 significa que la sentencia que se ha ejecutado anteriormente lo ha hecho de forma satisfactoria. Si el valor, en cambio, fuese 4 o cualquier otro, entonces hemos de suponer que dentro de la tabla sflight no existe ningún registro que confirme la condición dada en la cláusula WHERE.
Por supuesto, podemos hacer esta sentencia un poco más eficiente de la siguiente forma:
SELECT SINGLE connid FROM sflight INTO i_vuelos-connid WHERE connid = p_connid. APPEND i_vuelos. CLEAR i_vuelos.

Clausula FOR ALL ENTRIES; Nos permite obtener todos los registros de una tabla de BBDD, cargandola en una tabla
interna.

NOTA: Con la Instrucción FOR ALL ENTRIES hay que tener sumo cuidado en la manera en que se va a usar, primero se debe asegurar que la tabla driver con la se va a comparar no se encuentre vacia, pues si es así, traería toda la data que esté en la base de datos, perjudicando el performance del programa, y segundo, si la tabla interna tiene muchos registros, el select a la Base de Datos sería mucha mas lento pues si utilizaría mucha memoria.


 

 

 


Sobre el autor

Publicación académica de Francisco Javier Gomez Jimenez, en su ámbito de estudios para la Carrera Consultor ABAP.

SAP Expert

Francisco Javier Gomez Jimenez

Profesión: Consultor Junior - España - Legajo: KW17D

✒️Autor de: 200 Publicaciones Académicas

🎓Cursando Actualmente: Consultor ABAP Nivel Avanzado

🎓Egresado de los módulos:

Certificación Académica de Francisco Gomez

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "El lenguaje SQL y la sentencia SELECT" de la mano de nuestros alumnos.

SAP Master

SENTENCIA SELECT INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna simepre despues de un select se debe preguntar por el sy-subrc para saber como proseguir SENTENCIA SINGLE para obtener la primera ocurrencia de la tabla clausula in para select option FOR ALL ENTRIES IN es un formato especial de la sentencia where que se utiliza para especificar condiciones en tiempo de ejecucion no se pueden utilizar like between e in

Acceder a esta publicación

Creado y Compartido por: Andres Felipe Escobar Lopez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

La sentencia SELECT. SELECT: Sentencia ABAP que se utiliza para acceder a las bases de datos a SAP. Tabla interna: Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. La cantidad de registros máxima esta relacionada con los límites especificados en la instalación del sistema. INTO TABLE: Cláusula ABAP que se utiliza con la sentencia SELECT y produce que los registros de las tablas que se seleccionan se ve la tabla interna que se especifica a continuación. APPENDING TABLE: Cláusula ABAP que se utiliza con la sentencia SELECT y produce que los registros de las tablas que se seleccionan se añadan al final de la tabla interna...

Acceder a esta publicación

Creado y Compartido por: Rafael Razo

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

SELECT: Sentencia ABAP que se utiliza para acceder a las BD. SINTAXIS: SELECT <CAMPOS A SELECCIONAR> FROM <TABLA DONDE SE REALIZARA RA BÚSQUEDA> INTO <DESTINO DE LOS DATOS> INTO TABLE <SE UTILIZA SI EL DESTINO DE LOS DATOS ES UNA TABLA INTERNA> WHERE <CONDICIONES DE LA BÚSQUEDA> APPENDING TABLE: SE UTILIZA CON EL SELECT PARA INDICAR QUE LOS DATOS SE DEBEN INGRESAR AL FINAL DE LA TABLA INTERNA Y NO SIN PISAR LOS YA EXISTENTES EN ELLA. SINGLE: ESTA CLAUSULA QUE SE UTILIZA CON EL SELECT PARA SELECCIONAR EL PRIMER REGISTRO QUE CUMPLA CON LAS CONDICIONES DE BÚSQUEDA. INTO CORRESPONDING FIELDS OF TABLE: CLAUSULA ABAP QUE SE UTILIZA CON UN SELECT Y ES NECESARIA SI QUEREMOS UTILIZAR UN ÁREA...

Acceder a esta publicación

Creado y Compartido por: Juan Santamaria Borja

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


1) SENTENCIA SELECT SELECT es la sentencia que se utiliza para leer los datos de una tabla de la BD. Sintaxis: SELECT <campos> FROM <tabla> INTO <target> where <condiciones>. Existen muchas cláusulas que se pueden utilizar en el SELECT: Si necesitamos que el resultado de la consulta se guarde en una tabla interna: SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios. Si necesitamos conservar el contenido de la tabla interna luego de reiteradas selecciones. SELECT * FROM ztabla_usuarios APPENDING TABLE ti_usuarios. Utilizar CLEAR y REFRESH a la tabla interna antes de la selección Si se desea obtener el campo DNI de todos los campos de la tabla...

Acceder a esta publicación

Creado y Compartido por: Maria Guadalupe Gonzalez Sanchez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

una sentencia peculiar de ABAP en el uso de tablas es: CORRESPONDING FIELDS OF TABLE, se utliza con la sentencia SELECT y es necesaria si se quiere usar un area de trabajo con diferente estructura a el area de trabajo de la tabla leida. La sentencia FOR ALL ENTRIES IN, es util para buscar las coincidencias de una tabla interna en una tabla base de datos

Acceder a esta publicación

Creado y Compartido por: Carolina Sanchez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP SemiSenior

LA SENTENCIA SELECT: Sentencia que se usa para accesar a los datos. SELECT <resultado FROM <tabla> into <target> (es el destino donde serán alojados los datos). WHERE <conditios>. SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios. INTO TABLE (los registros seleccionados se colocan en la tabla interna). (el INTO puede ir antes o después del FROM). APPENDING TABLE (los registros seleccionados se colocan en la tabla interna PERO sin borrar los que ya se tenían almancenados). Es recomendable usar CLEAR y REFRESH de la tabla interna antes de realizar la selección. SINGLE (selecciona la primer ocurrencia de la consulta) es como traer el TOP en SQL, CLEAR wa_usuarios. SELECT SINGLE * FROM ztabla_usuarios...

Acceder a esta publicación

Creado y Compartido por: Gerardo De La Rosa Rivera

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Instrucciones SQL: La sentencia SELECT 1. La sentencia SELECT Se utiliza para acceder a la base de datos SELECT <campos> FROM <tabla > INTO <target> WHERE <condiciones> La cláusula INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna. Si queremos conservar el contenido de la tabla interna utilizamos la cláusula APPENDING TABLE en lugar de INTO TABLE y agrega los registros al final. Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la selección. Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir. Si quisiéramos obtener la primera ocurrencia de la tabla ZTABLA_USUARIOS donde se cumpla determinada...

Acceder a esta publicación

Creado y Compartido por: Pedro Alejandro Arroyo Gutierrez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

Sentencias ABAP que se utilizan para acceder a la base de datos: SELECT <resultado> FROM <tabla> INTO TABLE <target> WHERE <condiciones>. Evitar el uso del * cuando solo se requiera obtener algunos campos de la tabla origen. Es una buena práctica. Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la selección. Si necesitamos conservar el contenido de la tabla interna a la que haremos el SELECT ... INTO tablainterna tenemos que usar la cláusula APPENDING TABLE en lugar de INTO TABLE. APPENDING TABLE: cláusula que se usa con la sentencia SELECT y produce que los registros de las tablas que se seleccionan se añadan al final de la tabla interna sin pisar los registros...

Acceder a esta publicación

Creado y Compartido por: Jose Ignacio Rodini

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

1- La sentencia SELECT SELECT <resultado> "En resultado se colocan los campos que se quieren recuperar" FROM <tabla> "Es la tabla origen de donde se secan los datos" INTO <target> "Es el destino donde serán alojados los datos" WHERE <condiciones> "Condiciones de la búsqueda" Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la selección. Otras clausulas: SINGLE: Para obtener la primera ocurrencia de una tabla. INTO CORRESPONDING FIELDS OF TABLE: Para obtener los registros de una tabla interna en una tabla que no tiene la misma estructura IN: Se utiliza para los select-options en...

Acceder a esta publicación

Creado y Compartido por: Calixto Gutiérrez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


CLEAR WA_USUARIOS. REFRESH TI_SFLIGHT. SENTENCIAS SELECT SELECT * FROM SFLIGHT INTO TABLE TI_SFLIGHT WHERE S_FLIGHT-FLIGHT ='001'. Si quisieramos obtener de una tabla los registros que cumplan una condicion pero queremos guardarlos en una tabla interna que no tiene la misma estructura que la tabla, entonces tenemos que usar la clausula INTO CORRESPONDING FIELDS OF TABLE. Se utiliza con un area de trabajo al area utilizada para leer la tabla, Realiza la comparacion de los campos teniendo en cuenta los tipos de los campos de cada tabla y la posicion de cada uno de ellos (ej: un campo de tipo char de 4 posiciones en cada tabla). La clausula IN se utiliza para los select-options en las condiciones de un select. ej: select * from ztabla_usuarios...

Acceder a esta publicación

Creado y Compartido por: Oscar Guillermo Rodriguez Villate / Disponibilidad Laboral: FullTime

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 79.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!