Logali Training
Open Close Cursor teoria

Open Close Cursor teoria

Las instrucciones OPEN, FETCH y CLOSE CURSOS se utilizan para abrir, iterar y cerrar un cursor de base de datos para las sentencias de lectura. Esta lección trata de enseñarle la parte teórica y las implicaciones que conllevan estas instrucciones.

  1. OPEN CURSOR
  • Sintaxis

OPEN CURSOR [WITH HOLD] dbcur FOR

SELECT result

FROM source

[[FOR ALL ENTRIES IN itab] WHERE sql_cond] [GROUP BY group] [HAVING group_cond] [ORDER BY sort_key].

 

  • Efecto

Esta sentencia abre un cursor de base de datos para la selección definida después de FOR, y asocia una variable de cursor con el cursor de base de datos. El conjunto de resultados de la selección se puede leer con la instrucción FETCH.

El cursor dbcur espera una variable declarada con el cursor de tipo de datos predefinido específico. Un cursor de base de datos que se ha abierto no puede ser abierto otra vez. Una línea del conjunto de resultados siempre se asigna en base de datos al cursor abierto como una posición del cursor. Después de la instrucción OPEN CURSOR, la posición del cursor se coloca delante de la primera línea del conjunto de resultados.

Después de FOR, se puede introducir la sintaxis de una instrucción SELECT que contiene todas las adiciones de la sentencia SELECT normal, excepto para INTO y APPENDING.

SELECT SINGLE, SELECT SINGLE FOR UPDATE y SELECT COUNT( *)  no pueden ser utilizados en la sentencia OPEN CURSOR.

Si se especifica la adición WITH HOLD, el cursor de la base de datos no se cierra mediante el commit de base de datos ejecutado con Native SQL.

  • Notas

La adición WITH HOLD es ignorada por los commit implícitos de la base de datos, por los commit producidos por la declaración COMMIT WORK, o por cualquier reversión que siempre cierra el cursor de base de datos.

Un commit de base de datos SQL nativo se puede realizar utilizando el módulo de función DB_COMMIT.

 

  1. FETCH
  • Sintaxis

FETCH NEXT CURSOR dbcur {INTO|APPENDING} target.

  • Efecto

Esta sentencia extrae las filas solicitadas (usando la adición INTO o APPENDING) del conjunto de resultados del cursor de base de datos (asociado con la variable cursor dbcur) de la posición actual del cursor y asigna estas filas a los objetos de datos especificados en el conjunto de resultados.

La variable de cursor dbcur debe ser una variable declarada por el cursor de tipo de datos predefinido especial, que se abrió con la sentencia OPEN CURSOR, o se le asignó otro cursor. De lo contrario, se produce una excepción manejable.

La sintaxis y el significado de la adición INTO o el objetivo APPENDING son completamente sinónimos de las adiciones idénticas de la sentencia SELECT.

Si se especifica un área de trabajo después de INTO, se extrae una fila. Si se especifica una tabla interna después de INTO o APPENDING, entonces se extraen todas las filas o tantas como se especifica en la adición PACKAGE SIZE.

FETCH NEXT CURSOR dbcur

INTO TABLE itab PACKAGE SIZE n.

La instrucción FETCH mueve la posición del cursor de la base de datos (que está asociada con dbcur) por la cantidad de filas extraídas a la siguiente fila que se va a extraer. Si la última fila del conjunto de resultados se extrajo en una instrucción FETCH, cada instrucción FETCH posterior en la que dbcur está asociado con el mismo cursor de base de datos establece el valor de la variable del sistema SY-SUBRC en 4, sin afectar a los objetos de datos especificados después de INTO o APPENDING.

  • Comportamiento de las variables del sistema

La sentencia FETCH establece los valores de los campos del sistema SY-SUBRC y SY-DBCNT.

SY-SUBRC Significado
0 Al menos una fila se extrajo del conjunto de resultados.
4 No se extrajo ninguna fila.

Después de cada extracción de fila, la instrucción FETCH establece en la variable del sistema SY-DBCNT la cantidad de filas extraídas hasta ahora del conjunto de resultados relevantes. Si se produce un desbordamiento porque el número o filas es mayor que 2,147,483,647, SY-DBCNT se establece en -1. Si no se puede extraer ninguna fila, SY-DBCNT se establece en 0.

  • Notas

Las sentencias FETCH que acceden a las líneas de resultados pueden tener las adiciones INTO o APPENDING. Se pueden especificar áreas de trabajo o tablas internas.

Depende del sistema de base de datos si el cursor en base de datos se cierra implícitamente después de la extracción de la última fila del conjunto de resultados o no. Por esta razón, siempre es mejor utilizar explícitamente la instrucción CLOSE CURSOR.

 

  1. CLOSE CURSOR
  • Sintaxis

CLOSE CURSOR dbcur.

  • Efecto

Esta instrucción cierra el cursor de la base de datos e inicializa la variable del cursor dbcur.

  • Notas

Dado que sólo un número limitado de cursores de base de datos puede abrir simultáneamente, debe cerrar todos los cursores de base de datos que ya no necesita en la lógica de programación.

Inicializar una variable de cursor utilizando la instrucción CLEAR, no es suficiente para cerrar el cursor de base de datos.

Una vez cerrado el cursor de la base de datos, ya no se puede acceder a él. Otras variables de cursor que se vincularon con el cursor de base de datos no se inicializan, pero se convierten en no válidas y al acceder a ellas podría generar una excepción que se puede manejar.

Gheorghe Valer Scurtu

Añadir comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Cursos Destacados

Síguenos

Si desea estar informado de nuestros nuevos cursos, obtener promociones o desea recibir algún tipo de información.