SQL que proporciona construcciones de procedimiento que se pueden utilizar para implementar la lógica alrededor de las sentencias de SQL tradicionales. El SQL PL es un lenguaje de programación de alto nivel con una sintaxis sencilla y sentencias habituales de control de programación, que incluyen las sentencias IF, ELSE, WHILE, FOR, ITERATE y GOTO, así como otras sentencias. Los procedimientos de SQL PL pueden contener parámetros, variables, sentencias de asignación, sentencias de control de SQL PL y sentencias de SQL compuestas. Los procedimientos de SQL PL también dan soporte a un potente mecanismo de manejo de errores y condiciones, a las llamadas anidadas y repetitivas y a la devolución de varios conjuntos de resultados al llamante o a la aplicación cliente. Un procedimiento almacenado es un objeto perteneciente a una base de datos, que contiene un conjunto de instrucciones SQL, tanto de consulta, como de manipulación de datos, como de control de la secuencia del programa, asociados a un nombre, y que son ejecutados en conjunto. Puede contener parámetros tanto de entrada como de salida (parámetros pasados por referencia), así como devolver un valor de retorno.
Son precompilados al ejecutarse por primera vez,
y no vuelven a ser compilados con las subsiguientes ejecuciones, lo que proporciona una cierta mejora en el rendimiento. No obstante si se desea se puede forzar su re compilación. Este tipo de objetos, al residir en la propia base de datos, son compartibles por todos los usuarios, pudiendo de esta manera beneficiarse de los distintos cachés del servidor.
Al ser código externo a la aplicación puede ser
alterado sin que exista siempre la necesidad de modificar el código de la misma. Al ser objetos de la base de datos se hallan sujetos a los esquemas de seguridad determinados por el administrador de la misma: Existen diversas clases de procedimientos almacenados, entre los que se encuentra los procedimientos almacenados del sistema, que sirven de herramientas para la realización de distintas tareas de administración. Un procedimiento almacenado se crea con la sentencia CREATE PROCEDURE que debe ser la única dentro de un mismo batch (linea de procedimientos). La creación de un procedimiento almacenado puede ser realizada bien desde la opción Manage.Stored Procedures del Enterprise Manager , o bien desde la propia ventana donde se muestran los objetos de la base de datos (Query), en el grupo correspondiente a los procedimientos almacenados, dentro de esta última herramienta. CREATE PROCEDURE Nombre_del_procedimiento [Lista_de_parámetros] AS (Sentencias SQL) [RETURN [Valor]]
Nombre_del_procedimiento :
Identificador que determina el nombre asignado al
procedimiento y que debe cumplir con la regla de definición de identificadores establecida en MSSQL Server. Lista_de_parámetros :
Parámetros definidos en el procedimiento con la siguiente
sintaxis: @nombre_var Tipo_var [OUTPUT] El símbolo @ es necesario no sólo en la declaración sino que forma parte del propio nombre. La claúsula OUTPUT determina que dicho parámetro será utilizado para pasar información al código llamador, es decir, viene a ser un parámetro pasado por referencia. Dicha lista puede contener un máximo de 255 parámetros. Sentencias_SQL:
Como se explicó anteriormente, el cuerpo del procedimiento
puede estar compuesto de cualquier tipo de instrucción SQL, a excepción de las siguientes: CREATE VIEW CREATE DEFAULT CREATE RULE CREATE PROCEDURE CREATE TRIGGER Entre las instrucciones que puede contener, está la llamada a otros procedimientos almacenados, los cuales podrán acceder a los objetos pertenecientes al llamador, exceptuando las tablas temporales creadas por el mismo. RETURN [Valor]
Un procedimiento almacenado puede devolver un valor de
retorno de tipo integer , no nulo, que puede ser rescatado por el código llamador para tener conocimiento del resultado del proceso de dicho procedimiento. Los valores -1 al -99 están reservados por el sistema, así como el 0 que se interpreta como “finalizado con éxito”. Si no se proporciona un código definido por el usuario, se utilizan los del sistema. De la misma forma los definidos por el usuario tiene prioridad sobre los definidos por el sistema. En caso de producirse varios errores a lo largo de la ejecución del mismo procedimiento, se devuelve el código cuyo valor absoluto es mayor. Algunos ejemplos de códigos y sus significados son los Disparadores DELIMITER // CREATE PROCEDURE addAutomovil(IN nombre VARCHAR(50),IN plazas INT) BEGIN IF plazas < 6 THEN INSERT INTO coche VALUES(nombre,plazas); ELSE INSERT INTO monovolumen VALUES(nombre,plazas); END IF; END; > // Este procedimiento almacenado recibe los parámetros de nombre y número de plazas y en función de las plazas del vehículo inserta los datos en la tabla coche o monovolumen.