SQL inmerso en C/C++ (Parte V)
11 de julio de 2007
Programación con cursores
Los cursores son estructuras con las que Oracle nos permite recorrer resultados de consultas t-upla a t-upla. Un ejemplo para la creación de un cursor sobre el resultado de una consulta se realiza de la siguiente forma:
- EXEC SQL DECLARE (nombre_del_cursor) CURSOR FOR
SELECT (atributo)
FROM (tabla);
- EXEC SQL WHENEVER NOT FOUND DO break;
- For ( ; ; ) {
EXEC SQL FETCH dato TO <:variable_huesped>
(... acciones ...)
}
- Next: siguiente elemento al actual.
- Last: último elemento del cursor.
- Prior: anterior elemento al actual.
- First: primer elemento del cursor.
- EXEC SQL OPEN (nombre_cursor);
- EXEC SQL CLOSE (nombre_cursor);
- EXEC SQL DELETE FROM (nombre_tabla) WHERE CURRENT OF (cursor)
SQL estático y SQL dinámico
Dentro del SQL podemos encontrar dos variantes de éste: el SQL estático y el dinámico.
El SQL estático es aquella parte del mismo que se encarga de consultar, modificar, etc,una base de datos. En esta variante se da por conocidas las instrucciones SQL completas en el momento de escribir el programa, lo cual lleva a crear una serie de pasos comunes a seguir. Simplemente, se incorpora en el archivo fuente del lenguaje principal y el precompilador maneja la conversión necesaria a las llamadas a API de servicio de tiempo de ejecución del gestor de bases de datos que puede procesar el compilador del lenguaje principal.
Por lo tanto, si en algún momento el propio programa fuese el que tuviera que tomar una decisión (en tiempo de ejecución decidir las sentencias a usar o las tablas a referenciar), esta variante no nos resultaría útil.
Para ello, se emplea la otra variante conocida como SQL dinámico, que facilita la generación y ejecución automática de las declaraciones del programa. Esto puede ser útil cuando es necesario escribir código que puede modificar las bases de datos, condiciones o servidores. Esto también hace más fácil automatizar tareas que se repiten varias veces.
Las declaraciones de SQL dinámico están guardadas como cadenas de caracteres que son introducidas cuando el programa se ejecuta. Estas declaraciones pueden ser introducidas por el programador o generadas por el mismo programa, pero a diferencia de las declaraciones de SQL estático, no están inmersas en el código fuente. En contraste con las declaraciones del SQL estático, las de SQL dinámico pueden cambiar de una ejecución a otra.
A continuación se muestra un ejemplo de una sentencia ejecutada dinámicamente en C:
- /* Actualizar columna de tabla mediante DYNAMIC SQL*/
strcpy(hostVarStmtDyn, "UPDATE staff SET salary = salary + 1000 WHERE dept = ?");
EXEC SQL PREPARE StmtDyn FROM :hostVarStmtDyn;
EXEC SQL EXECUTE StmtDyn USING :dept
- EXECUTE IMMEDIATE Prepara y ejecuta una sentencia que no utiliza ninguna variable del lenguaje principal. Se utiliza esta sentencia como alternativa a las sentencias PREPARE y EXECUTE. Por ejemplo:
strcpy (qstring,"INSERT INTO WORK_TABLE SELECT *
FROM EMP_ACT WHERE ACTNO >= 100");
EXEC SQL EXECUTE IMMEDIATE :qstring; - PREPARE Convierte el formato de serie de caracteres de la sentencia de SQL en un formato ejecutable de la sentencia, asigna un nombre de sentencia y opcionalmente coloca información sobre la sentencia en una estructura SQLDA.
- EXECUTE Ejecuta una sentencia de SQL previamente preparada. La sentencia se puede ejecutar repetidamente dentro de una conexión.
Etiquetas: Manuales
Posteado por Koenma a las 10:06, |                  Ir al Inicio | Ir Arriba