La sentencia EGL get recupera un solo registro de archivo o fila de base de datos y proporciona una opción que permite sustituir o suprimir los datos almacenados más tarde en el código. Además, esta sentencia permite recuperar un conjunto de filas de base de datos y sustituir cada fila sucesiva en el siguiente registro SQL de una matriz dinámica.
La sentencia get se identifica a veces como get by key value y es distinta de otras sentencias que empiezan por la palabra get.
Si el recurso es recuperable (como en el caso de un archivo VSAM o una base de datos SQL), la opción forUpdate bloquea el registro de forma que otros programas no puedean cambiarlo hasta que se produzca un compromiso. Encontrará los detalles sobre el proceso de compromiso en Unidad lógica de trabajo.
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.
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 get o es la base de la matriz dinámica a la que se hace referencia en la sentencia get.
En el caso de una matriz dinámica, los elementos de la cláusula usingKeys (o las variables de lenguaje principal del registro SQL) no deben estar en el registro SQL que es la base de la matriz dinámica.
La información de usingKeys se pasa por alto si especifica una sentencia SQL explícita.
emp.empnum = 1; // establece la clave en el registro emp try get emp forUpdate; onException myErrorHandler(8); // sale del programa end emp.empname = emp.empname + " Smith"; try replace emp; onException myErrorHandler(12); end
try get emp singleRow into empname with #sql{ select empname from Employee where empnum = :empnum }; onException myErrorHandler(8); end
try get emp forUpdate into empname with #sql{ select empname from Employee where empnum = :empnum }; onException myErrorHandler(8); // sale del programa end emp.empname = emp.empname + " Smith"; try replace emp; onException myErrorHandler(12); end
Los detalles de la sentencia get dependen del tipo de registro. Para obtener detalles acerca del proceso SQL, consulte el tema Registro SQL.
Si emite una sentencia get en un registro indexado, el valor de clave del registro determina qué registro se recupera del archivo.
Si el archivo es un archivo VSAM, la sentencia de EGL get (con la opción forUpdate) impide que otros programas cambien el registro. En los programas de proceso por lotes de z/OS, el bloqueo permanece hasta que se produce un compromiso, lo que podría no suceder hasta que finalice el paso del trabajo.En programas COBOL iSeries, el bloqueo permanece hasta que se produce un compromiso, que podría no suceder hasta el final de la unidad de ejecución, como se describe en Unidad de ejecución.
La sentencia EGL get da como resultado una sentencia SQL SELECT en el código generado. Si especifica la opción singleRow, la sentencia SQL SELECT es una sentencia autónoma. La sentencia SQL SELECT también puede ser una cláusula de un cursor, como se describe en el apartado Soporte SQL.
Al especificar un registro SQL como objeto de E/S para la sentencia get, pero no especifica una sentencia SQL explícita, la sentencia SQL SELECT implícita tiene las siguientes características:
SELECT columna01, columna02, ... columnaNN FROM nombreTabla WHERE columnaClave01 = :elementoClave01 FOR UPDATE OF columna01, columna02, ... columnaNN
INTO :elementoRegistro01, :elementoRegistro02, ... :elementoRegistroNN
EGL deriva la cláusula SQL INTO si el registro SQL va acompañado de una sentencia SQL SELECT explícita cuando no se ha especificado una cláusula INTO. Los elementos de la cláusula INTO derivada son aquellos que están asociados con las columnas listadas en la cláusula SELECT de la sentencia SQL. (La asociación de elementos y columnas se encuentra en el componente de registro SQL, como se indica en el apartado Propiedades de elementos SQL). es necesaria una cláusula EGL INTO si no hay una columna asociada con un elemento.
columnaClave01 >= :elementoClave01 & columnaClave02 >= :elementoClave02 & . . . columnaClaveN >= :elementoClaveN
Conceptos relacionados
Unidad lógica de trabajo
Tipos de registros y propiedades
Referencias a componentes
resultSetID
Soporte de SQL
Tareas relacionadas
Diagrama de sintaxis