Koenma's Laboratory




SQL inmerso en C/C++ (Parte II)

11 de julio de 2007

Área de Comunicaciones del SQL

El Área de Comunicaciones del SQL (SQLCA) es una estructura de datos que contiene variables de error e indicadores de estado. Gracias a ella, el programa de aplicación puede determinar el éxito o fallo de las sentencias SQL incorporado y actuar de manera correspondiente. En todo programa, la primera sentencia de SQL inmerso debería ser:
    EXEC SQL INCLUDE SQLCA;
Esta sentencia indica al precompilador de SQL que incluya un área de comunicaciones SQL en este programa.

Uno de los campos más importantes del Área de Comunicaciones del SQL es el SQLCODE, indicador de errores, y cuyos posibles valores son:

  • Cero: indica terminación con éxito de la sentencia.
  • Negativo: indica error serio que impidió la ejecución de la sentencia.
  • Positivo: indica condición de aviso, por ejemplo, truncamiento o redondeo.
No obstante, la variable SQLSTATE es la sustituta a la variable SQLCODE por estar estandarizada. Ésta variable consta de dos partes:

  • La clase de error (dos caracteres) que identifica la clasificación general del error.
  • La subclase de error (tres caracteres) que identifica el tipo específico de error dentro de una clase de error general.
La sentencia WHENEVER tiene como fin simplificar el manejo de errores en SQL inmerso. Es una directiva para el precompilador de SQL, no se trata de una sentencia ejecutable.Ésta indica al precompilador que genere automáticamente un código de gestión de errores a continuación de cada sentencia ejecutable del SQL inmerso y especifica lo que el código generado debería hacer.

En un programa, cualquier sentencia de SQL debería de estar seguida por un código que controlase los valores de las variables SQLCODE y SQLSTATE referentes a la ejecución de la instrucción. La simplificación de esta tarea, la realiza la sentencia WHENEVER.

El uso de la sentencia WHENEVER es de la siguiente forma:
    EXEC SQL WHENEVER (condición)(acción)
Las condiciones son:
  • NOT FOUND: se evalúa a ‘true’ si no se encuentran datos que cumplan las condiciones específicas en la instrucción (SQLCODE =+100).
  • SQLWARNING: se evalúa a ‘true’ si se produce algún aviso ‘m’ en la ejecución de la instrucción (SQLCODE > 0).
  • SQLERROR: se evalúa a ‘true’ si ha ocurrido algún error en la ejecución de la instrucción (SQLCODE <>
Las acciones pueden ser:
  • GOTO (etiqueta): significa que el procesador de SQL incluirá detrás de cualquier sentencia SQL del programa la sentencia IF (condición) THEN GO TO (etiqueta)
  • CONTINUE: el procesador de SQL no tomará ninguna acción siendo responsabilidad del programador controlar el flujo del programa.
  • STOP: detiene y aborta el programa.
  • DO: ejecuta una función de gestión de errores.
A continuación, se muestran todos los campos que contiene la estructura SQLCA:

    Struct sqlca {
      unsigned char sqlcaid[8]; /* Cadena “SQLCA”*/
      long sqlcabc; /* Longitud delSQLCA en bytes */
      long sqlcode; /* Código de estado SQL */
      short sqlerrml; /* Longitud del array de datos sqlerrmc */
      unsigned chart sqlerrmp[8]; /* Información de diagnóstico */
      long sqlerrd[6]; /* Varias cuentas y códigos de error */
      unsigned chart sqlwarn[8]; /* Array de indicadores de aviso */
      unsigned chart sqlext[8]; /* Extensión del array sqlwarn */

    }

Etiquetas:

 
Posteado por Koenma a las 9:58, |                  Ir al Inicio | Ir Arriba

0 Comentario(s):


Publicar un comentario