SQL clásico
Cursores¶
Los cursores SQL son una característica esencial de los sistemas de gestión de bases de datos relacionales del operacional que permiten procesar los resultados de las consultas fila por fila. Aunque SQL suele estar optimizado para operaciones basadas en conjuntos, hay situaciones en las que es necesario realizar operaciones fila por fila. En estos casos, los cursores permiten procesar cada fila individualmente. Es necesario debido a que muchos lenguajes de programación sufren de lo que en inglés se conoce como impedance mismatch. Como norma general, los lenguajes de programación son procedurales y no disponen de ningún mecanismo para manipular en una sola instrucción conjuntos de resultados de consultas (datasets). Debido a ello, las filas deben ser procesadas de forma secuencial por la aplicación. Un cursor puede verse como un iterador sobre la colección de filas que habrá en el conjunto de resultados
Prepared Statements¶

Una prepared statement es un server-side object que puede utilizarse para optimizar el rendimiento. Cuando se ejecuta la sentencia PREPARE, la sentencia especificada es analizada y reescrita. Cuando, posteriormente, se emite un comando EXECUTE, la sentencia preparada se planifica y ejecuta. Esta división del trabajo evita el trabajo repetitivo de análisis sintáctico, al tiempo que permite que el plan de ejecución dependa de los valores específicos de los parámetros suministrados
Las sentencias preparadas pueden tomar parámetros: valores que se sustituyen en la sentencia cuando se ejecuta. Al crear la sentencia preparada, hace referencia a los parámetros por posición, utilizando $1, $2, etc. Opcionalmente, se puede especificar una lista correspondiente de tipos de datos de parámetros. Cuando no se especifica el tipo de datos de un parámetro o se declara como desconocido, el tipo se deduce del contexto en el que se hace referencia al parámetro por primera vez (si es posible). Al ejecutar la sentencia, se debe especificar los valores reales de estos parámetros
Las sentencias preparadas sólo duran lo que dura la sesión actual de la base de datos. Cuando la sesión finaliza, la sentencia preparada se olvida, por lo que debe volver a crearse antes de volver a utilizarse. Esto también significa que una única sentencia preparada no puede ser utilizada por varios clientes simultáneos de la base de datos. Sin embargo, cada cliente puede crear su propia sentencia preparada para utilizarla. Las sentencias preparadas pueden limpiarse manualmente mediante un comando DEALLOCATE
Las declaraciones preparadas funcionan, básicamente, en dos pasos:
- Preparar: Se crea una plantilla de sentencia SQL y se envía a la base de datos. Ejemplo:
INSERT INTO MisInvitados VALUES(?, ?, ?). La base de datos analiza, compila y optimiza la consulta de la plantilla de sentencia SQL y almacena el resultado sin ejecutarlo - Ejecutar: Posteriormente, la aplicación asocia los valores a los parámetros y la base de datos ejecuta la sentencia. La aplicación puede ejecutar la sentencia tantas veces como quiera con diferentes valores de los parámetros
En comparación con la ejecución directa de sentencias SQL, las sentencias preparadas tienen tres ventajas principales:
- Las sentencias preparadas reducen el tiempo de análisis ya que la preparación de la consulta sólo se realiza una vez (aunque la sentencia se ejecute varias veces)
- Los parámetros vinculados minimizan el ancho de banda hacia el servidor, ya que sólo es necesario enviar los parámetros cada vez, y no toda la consulta
- Las sentencias preparadas son muy útiles contra las inyecciones SQL, ya que no es necesario escapar correctamente los valores de los parámetros, que se transmiten posteriormente utilizando un protocolo diferente. Si la plantilla original de la sentencia no se deriva de una entrada externa, no puede producirse la inyección SQL
Lectura recomendada ![]()