En los programas se utilizan sentencias SQL para insertar, modificar, seleccionar o eliminar filas en tablas. Estas sentencias se denomina Lenguaje de Manipulación de Datos o DML. En sucesivas entradas iremos viendo la sintaxis de las sentencias SQL mecionadas anteriormente.
Aprovecho esta entrada, ya que lo que voy a decir es común para las sentencias SQL mencionadas en el anterior párrafo, para hablar de la sentencia COMMIT. Esta sentencia se utiliza para hacer permanentes los cambios realizados a través de cualquiera de las sentencias SQL mencionadas (a excepción de la select ya que sólo recupera información). Hay programas que no la utilizan pero en otros sí. El problema de no usarla es que todas las modificaciones realizadas en una tabla, en caso de que falle un programa en el proceso batch en el que se ejecuta, se pierden pues se hace automáticamente ROLLBACK. En este caso se relanzaría la cadena a partir del paso cascado con todos los registros del fichero de entrada (en ocasiones se elimina el registro que ha provocado el error).
¿Cómo se emplea la sentencia COMMIT y en qué casos? Es muy fácil, normalmente se utiliza cuando estamos ante un proceso en el que se quiere, en caso de error en un determinado registro de un fichero y falle el jcl en el que se procesa, procesar aquellos registros no procesados a partir del último registro del que se ha hecho COMMIT. La manera en que normalmente se utiliza es la siguiente: cuando alguna sentencia SQL (insert, update o delete) termina bien (SQLCODE = 0) incrementamos en 1 una variable que previamente hayamos definido, por ejemplo W-COMMIT, e inicializado a 0 ó 1 (esto va en gustos) al inicio del programa, cuando esa variable sea mayor que un determinado valor, por ejemplo 50, se realizarán tres acciones: ejecutar la sentencia COMMIT, inicializar la variable W-COMMIT y mostrar por pantalla qué registro del fichero de entrada ha sido el último que ha provocado la realización del COMMIT. Este proceso supone que para cada cierto número de sentencias SQL hagamos COMMIT y no perdamos los cambios hechos en una tabla. Es importante mostrar en pantalla el registro del fichero a partir del cual se ha hecho la sentencia SQL que ha provocado que el incremento en 1 de la variable W-COMMIT haya cumplido la condición para hacer COMMIT ya que si después del COMMIT se procesan muy pocas filas y casca el proceso debemos saber cuál esl último registro procesado para eliminar del fichero de entrada ese registro y los anteriores y así lanzar de nuevo el jcl desde el paso cascado con aquellos registros del fichero de entrada que queden por procesar.
Bien es verdad que mediante sentencias SQL podemos manejar tablas (crear una tabla, modificar campos de la tabla, añadir campos nuevos a la tabla,...) pero no lo vamos a ver ya que dichas sentencias no se utilizan en programas cobol.
Las sentencias SQL que veremos en siguientes entradas, para ser utilizadas en programas cobol, debemos realizar lo siguiente:
EXEC SQL
[sentencia SQL]
END-EXEC
En
[sentencia SQL] se indicará la sentencia SQL que corresponda (y que veremos en sucesivas entradas).
Se debe controlar el SQLCODE devuelto tras la ejecución de la correspondiente sentencia SQL.
Lo más importante de todo es no olvidarnos de incluir un INCLUDE muy importante cuando manejamos sentencias SQL en un programa COBOL. Dicho INCLUDE tan importante es: SQLCA.