La sentencia EGL open selecciona un conjunto de filas de una
base de datos relacional para recuperarlo posteriormente mediante sentencias get
next. La sentencia open puede operar sobre un cursor o sobre un procedimiento al que se llama.
- IDconjuntoResultados
- ID que conecta la sentencia open con las sentencias get next,
replace, delete y
close posteriores. Para obtener detalles, consulte el apartado resultSetID.
- scroll
Opción que permite moverse a través de un conjunto de resultados de varias maneras. La
sentencia
get next siempre está disponible, pero la utilización de
scroll permite utilizar también las sentencias siguientes:
- get absolute
- get current
- get first
- get last
- get previous
- get relative
- hold
- Mantiene la posición en un conjunto de resultados cuando se produce una operación de compromiso.
Nota: La opción hold solo está disponible si el controlador JDBC soporta JDBC
3.0 o una versión superior.
La opción
hold es adecuada en el siguiente caso:
- Está utilizando la sentencia EGL open para abrir un cursor en lugar de un procedimiento almacenado; y
- Desea comprometer los cambios periódicamente sin perder la posición en el conjunto de resultados; y
- El sistema de gestión de bases de datos da soporte a la utilización de la opción WITH
HOLD en le declaración de cursores SQL.
El código podría hacer lo siguiente, por ejemplo:
- Declarar una apertura de cursor ejecutando una sentencia EGL open
- Extraer una fila ejecutando una sentencia EGL get next
- Hacer lo siguiente en un bucle:
- Procesar los datos de alguna forma
- Actualizar la fila ejecutando una sentencia EGL replace
- Comprometer los cambios ejecutando la función de sistema sysLib.commit
- Extraer otra fila ejecutando una sentencia EGL get next
Si no especifica hold, la primera ejecución de paso 3d
fallará debido a que el cursor ya no está abierto.
Los cursores para los que especifique hold no se cierran en una operación de compromiso, pero una operación de retrotracción o conexión a base de datos cierra todos los cursores.
Si no necesita conservar la posición del cursor durante una operación de compromiso, no especifique hold.
- forUpdate
- Opción que permite utilizar una sentencia EGL posterior para sustituir o suprimir los datos recuperados de la base de datos.
No puede especificar forUpdate si está llamando a un procedimiento almacenado para recuperar un conjunto de resultados.
- usingKeys ... elemento
- Identifica una lista de elementos de clave utilizados para construir el componente de clave-valor de la cláusula WHERE en la sentencia SQL implícita. La sentencia SQL implícita se utiliza durante la ejecución si no especifica una sentencia SQL explícita.
Si no especifica una cláusula usingKeys, el componente de
clave-valor de la sentencia implícita se basa en el componente de registro SQL al que se
hace referencia en la sentencia open.
La información de
usingKeys se pasa por alto si especifica una sentencia SQL explícita.
- with #sql{ sentencia SQL }
- Una sentencia SQL SELECT explícita, que es opcional si también especifica un registro SQL. No deje espacios entre #sql y el corchete de apertura.
- into ... elemento
- Una cláusula INTO que identifica las variables de lenguaje principal EGL que reciben valores desde el cursor o procedimiento almacenado. En una cláusula como esta (que está fuera de un bloque #sql{ }), no incluya un punto y coma antes del nombre de una variable de lenguaje principal.
- with IDsentenciaPreparada
- El identificador de una sentencia EGL prepare que prepara una sentencia SQL SELECT o CALL durante la ejecución. La sentencia open
ejecuta la sentencia SQL SELECT o CALL dinámicamente. Para obtener detalles, consulte el apartado prepare.
- using ... elemento
- Una cláusula USING que identifica las variables de lenguaje principal EGL que quedan a disposición de la sentencia SQL SELECT o CALL durante la ejecución. En una cláusula como esta (que está fuera de un bloque #sql{ }), no incluya un punto y coma antes del nombre de una variable de lenguaje principal.
- nombre de registro SQL
- Nombre de un registro de tipo SQLRecord. Es obligatorio el nombre de registro o un valor
para sentenciaSQL; si se omite
sentenciaSQL, la sentencia SQL SELECT se deriva del registro SQL.
A continuación se ofrecen ejemplos (suponiendo la existencia de un registro SQL denominado emp):
open empSetId forUpdate for emp;
open x1 with
#sql{
select empnum, empname, empphone
from employee
where empnum >= :empnum
for update of empname, empphone
}
open x2 with
#sql{
select empname, empphone
from employee
where empnum = :empnum
}
for emp;
open x3 with
#sql{
call aResultSetStoredProc(:argumentItem)
}