Unidad 9. Programación en TRANSACT SQL (I)

9.1. Introducción

Hasta ahora hemos estudiado sentencias SQL orientadas a realizar una determinada tarea sobre la base de datos como definir tablas, obtener información de las tablas, actualizarlas; estas sentencias las hemos ejecutado desde el editor de consultas del MSSMS de una en una o a lo sumo una a continuación de la otra dentro de la misma consulta formando un lote de instrucciones.
Las sentencias que ya conocemos son las que en principio forman parte de cualquier lenguaje SQL. Ahora veremos que TRANSACT-SQL va más allá de un lenguaje SQL cualquiera ya que aunque no permita:

  • Crear interfaces de usuario.
  • Crear aplicaciones ejecutables, sino elementos que en algún momento llegarán al servidor de datos y serán ejecutados.

Incluye características propias de cualquier lenguaje de programación, características que nos permiten definir la lógica necesaria para el tratamiento de la información:

  • Tipos de datos.
  • Definición de variables.
  • Estructuras de control de flujo.
  • Gestión de excepciones.
  • Funciones predefinidas.
  • Elementos para la visualización, que permiten mostrar mensajes definidos por el usuario gracias a la cláusula PRINT.

Estas características nos van a permitir crear bloques de código orientados a realizar operaciones más complejas. Estos bloques no son programas sino procedimientos o funciones que podrán ser llamados en cualquier momento.
En SQL Server 2005 podemos definir tres tipos de bloques de código, los procedimientos almacenados, los desencadenadores (o triggers) y funciones definidas por el usuario.
Nosotros estudiaremos los dos primeros.
Empezaremos por los procedimientos almacenados, veremos primero las sentencias para crear y eliminar procedimientos almacenados, luego estudiaremos las instrucciones Transact-SQL más propias de un lenguaje de programación nombradas en el tema de Introducción al Transact-SQL  como son por ejemplo los bucles y estructuras condicionales. Estas instrucciones las utilizaremos dentro de procedimientos almacenados pero veremos que también nos servirán para definir otros bloques de código.
Terminaremos esta unidad de programación estudiando los disparadores o Triggers muy similares a los procedimientos almacenados que difieren básicamente en la forma en que entran en funcionamiento.

9.2. Procedimientos almacenados STORE PROCEDURE

Un procedimiento almacenado (STORE PROCEDURE) está formado por un conjunto de instrucciones Transact-SQL que definen un determinado proceso, puede aceptar parámetros de entrada y devolver un valor o conjunto de resultados. Este procedimiento se guarda en el servidor y puede ser ejecutado en cualquier momento.

Los procedimientos almacenados se diferencian de las instrucciones SQL ordinarias y de los lotes de instrucciones SQL en que están precompilados. La primera vez que se ejecuta un procedimiento, el procesador de consultas de SQL Server lo analiza y prepara un plan de ejecución que se almacena en una tabla del sistema. Posteriormente, el procedimiento se ejecuta según el plan almacenado. Puesto que ya se ha realizado la mayor parte del trabajo de procesamiento de consultas, los procedimientos almacenados se ejecutan casi de forma instantánea por lo que el uso de procedimientos almacenados mejora notablemente la potencia y eficacia del SQL.

SQL Server incorpora procedimientos almacenados del sistema, se encuentran en la base de datos master y se reconocen por su nombre, todos tienen un nombre que empieza por sp_. Permiten recuperar información de las tablas del sistema y pueden ejecutarse en cualquier base de datos del servidor.

También están los procedimientos de usuario, los crea cualquier usuario que tenga los permisos oportunos.

Se pueden crear también procedimiento temporales locales y globales. Un procedimiento temporal local se crea por un usuario en una conexión determinada y sólo se puede utilizar en esa sesión, un procedimiento temporal global lo pueden utilizar todos los usuarios, cualquier conexión puede ejecutar un procedimiento almacenado temporal global. Éste existe hasta que se cierra la conexión que el usuario utilizó para crearlo, y hasta que se completan todas las versiones del procedimiento que se estuvieran ejecutando mediante otras conexiones. Una vez cerrada la conexión que se utilizó para crear el procedimiento, éste ya no se puede volver a ejecutar, sólo podrán finalizar las conexiones que hayan empezado a ejecutar el procedimiento.

Tanto los procedimientos temporales como los no temporales se crean y ejecutan de la  misma forma, el nombre que le pongamos indicará de qué tipo es el procedimiento.

Los procedimientos almacenados se crean mediante la sentencia CREATE PROCEDURE y se ejecutan con EXEC (o EXECUTE). Para ejecutarlo también se puede utilizar el nombre del procedimiento almacenado sólo, siempre que sea la primera palabra del lote.  Para eliminar un procedimiento almacenado utilizamos la sentencia DROP PROCEDURE.

9.3. Eliminar procedimientos almacenados

Aunque no sabemos todavía crear un procedimiento comentaremos aquí la instrucción para eliminar procedimientos y así podremos utilizarla en los demás ejercicios.

    DROP {PROC|PROCEDURE}  [nombreEsquema.]nombreProcedimiento [,...n ].  

Transact-SQL permite abreviar la palabra reservada PROCEDURE por PROC sin que ello afecte a la funcionalidad de la instrucción.
Ejemplos:

    DROP PROCEDURE Dice_Hola;  

Elimina el procedimiento llamado Dice_Hola.

    DROP PROC Dice_Hola;  

Es equivalente, PROC y PROCEDURE indican lo mismo.

Para eliminar varios procedimientos de golpe, indicamos sus nombres separados por comas:

    DROP PROCEDURE Dice_Hola,  Ventas_anuales;  

Elimina los procedimientos Dice_Hola y Ventas_anuales.

Pág. 9.1

Atrás  Inicio  Adelante