Documentos de Académico
Documentos de Profesional
Documentos de Cultura
HUACHO
Ingeniería de Sistemas - V
PROCEDIMIENTO ALMACENADO
U
n procedimiento almacenado es un programa físicamente en una base de datos. Su
implementación varia de un gestor de base de datos a otro. La ventaja de un
procedimiento almacenado es que, al ser ejecutado, en respuesta a una petición de
usuario, es ejecutado directamente en el motor de base de datos el cual
usualmente corre en un servidor separado. Posee acceso directo a los datos que necesita
manipular y solo necesita enviar sus resultados de regreso al usuario deshaciéndose de la
sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
SINTAXIS:
USE MASTER
GO
CREATE DATABASE Hospital
On Primary
(Name = EjemploData,
Filename = 'F:\BASE_DATOS\Hospital.mdf', -- precisar la unidad respectiva
Size = 5MB, MaxSize = 10MB,
Filegrowth = 20%)
Log on
(NAME = EjemploLog,
Filename = 'F:\BASE_DATOS\Hospital.ldf', --precisar la unidad respectiva
Size = 3MB,
MaxSize = 5MB,
FileGrowth = 1MB)
GO
USE Hospital
GO
CREATE TABLE Dept
(
1
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
2
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
3
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
INSERT INTO Emp( Emp_No, Apellido, Oficio, Dir, Fecha_Alt, Salario, Comision,
Dept_No)
VALUES
(7369,'SANCHEZ','EMPLEADO',7902,'17/12/1980',10400,0,20),
(7499,'ARROYO','VENDEDOR',7698,'22/02/1981',208000,39000,30),
(7521,'SALA','VENDEDOR',689,'22/02/1981',162500,65000,30),
(7566,'JIMENEZ','DIRECTOR',7839,'02/04/1981',386750,0,20),
(7654,'MARTIN','VENDEDOR',7698,'28/09/1981',182000,182000,30),
(7698,'NEGRO','DIRECTOR',7839,'01/05/1981',370500,0,30),
(7782,'CEREZO','DIRECTOR',7839,'09/06/1981',318500,0,10),
(7788,'NINO','ANALISTA',7566,'30/03/1987',390000,0,20),
(7839,'REY','PRESIDENTE',0,'17/11/1981',650000,0,10),
(7844,'TOVAR','VENDEDOR',7698,'08/09/1981',195000,0,30),
(7876,'ALONSO','EMPLEADO',7788,'03/05/1987',143000,0,20),
(7900,'JIMENO','EMPLEADO',7698,'03/12/1981',123500,0,30),
(7902,'FERNANDEZ','ANALISTA',7566,'03/12/1981',390000,0,20),
(7934,'MUÑOZ','EMPLEADO',7782,'23/06/1982',169000,0,10),
(7119,'SERRA','DIRECTOR',7839,'19/11/1983',225000,39000,20),
(7322,'GARCIA','EMPLEADO',7119,'12/10/1982',129000,0,20)
GO
4
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
5
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
Crea el procedimiento numempdept con el parámetro ndep que es tipo smallint (equivalente al
short en visual). El procedimiento hace una select que realiza grupos por número de
departamento y cuenta cuantos empleados hay en cada departamento.
EXEC NUMEMPDEPT 20
EJEMPLO N° 02
6
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
PROCEDIMIENTOS ALMACENADOS
PARÁMETROS CON VALORES POR
DEFECTO
SINTAXIS:
Donde Valor es el valor que le damos por defecto, este valor puede almacenar comodines (como
% que equivale a *).
EJEMPLO N° 01
Crea un procedimiento con el parámetro ndept y le da por defecto valor 10.
EXEC NUMEMP
EJEMPLO N° 02
7
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
EJEMPLO N° 03
Sacaría oficio, salario y comisión de los empleados que tuviesen una S en su apellido.
EJEMPLO N° 4
Introducir oficio y salario debe sacar el apellido de los empleados que tengan el mismo apellido y
ganen mas del salario indicado. Debemos hacer que sino introduce nada saque todos los registros.
EJEMPLO N° 05
Sacar todos los empleados que se dieron de alta entre una determinada fecha inicial y fecha final y
que pertenecen a un determinado departamento.
8
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
EJEMPLO N° 06
Crear procedimiento que inserte un empleado. Crear otro procedimiento que borre un empleado
que coincida con los parámetros indicados (los parámetros serán todos los campos de la tabla
empleado).
9
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
ELIMINAR REGISTRO
10
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
EJERCICIOS
PROCEDIMIENTOS ALMACENADOS
SQL SERVER
1. Sacar todos los empleados que se dieron de alta entre una determinada fecha inicial y fecha
final y que pertenecen a un determinado departamento.
11
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
3. Crear un procedimiento que recupere el nombre, número y número de personas a partir del
número de departamento.
EXEC NUMEMP_DEPT 30
4. Crear un procedimiento igual que el anterior, pero que recupere también las personas que
trabajan en dicho departamento, pasándole como parámetro el nombre.
12
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
6. Igual que el anterior, pero si no le pasamos ningún valor, mostrará los datos de todos los
empleados.
7. Crear un procedimiento para mostrar el salario, oficio, apellido y nombre del departamento
de todos los empleados que contengan en su apellido el valor que le pasemos como
parámetro.
13
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
14
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
TRIGGERS
SQL SERVER
DESENCADENADORES
DISPARADORES
Son las operaciones de inserción (INSERT), borrado (DELETE) o actualización (UPDATE), ya que
modifican los datos de una tabla. La utilidad principal de un trigger es mejorar la administración de
la base de datos, ya que no requieren que un usuario los ejecute.
Los triggers pueden ser extremadamente útiles para llevar a cabo las siguientes casos:
Cuando los datos de una tabla son generados desde otro tipo de procesos y es necesario
que se controlen los valores, para evitar que algunos campos tomen valores concretos.
Para duplicar los contenidos de una tabla automaticamente y en tiempo real.
Para implementar restricciones sobre valores que pueden tomar ciertos campos de la
tabla.
Incrementar automáticamente los valores de un campo.
Para controlar las modificaciones de los valores de los campos.
Para realizar actualizaciones de una tabla en cascada.
Para modificar campos o registros en una tabla que un usuario no puede modificar
directamente.
USE MASTER
GO
CREATE DATABASE ESSALUD
GO
USE ESSALUD
GO
15
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
)
GO
16
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
INSERT INTO Emp( Emp_No, Apellido, Oficio, Dir, Fecha_Alt, Salario, Comision,
Dept_No)
VALUES
(7369,'SANCHEZ','EMPLEADO',7902,'17/12/1980',10400,0,20),
(7499,'ARROYO','VENDEDOR',7698,'22/02/1981',208000,39000,30),
(7521,'SALA','VENDEDOR',689,'22/02/1981',162500,65000,30),
(7566,'JIMENEZ','DIRECTOR',7839,'02/04/1981',386750,0,20),
(7654,'MARTIN','VENDEDOR',7698,'28/09/1981',182000,182000,30),
(7698,'NEGRO','DIRECTOR',7839,'01/05/1981',370500,0,30),
(7782,'CEREZO','DIRECTOR',7839,'09/06/1981',318500,0,10),
(7788,'NINO','ANALISTA',7566,'30/03/1987',390000,0,20),
(7839,'REY','PRESIDENTE',0,'17/11/1981',650000,0,10),
(7844,'TOVAR','VENDEDOR',7698,'08/09/1981',195000,0,30),
(7876,'ALONSO','EMPLEADO',7788,'03/05/1987',143000,0,20),
(7900,'JIMENO','EMPLEADO',7698,'03/12/1981',123500,0,30),
(7902,'FERNANDEZ','ANALISTA',7566,'03/12/1981',390000,0,20),
(7934,'MUÑOZ','EMPLEADO',7782,'23/06/1982',169000,0,10),
(7119,'SERRA','DIRECTOR',7839,'19/11/1983',225000,39000,20),
(7322,'GARCIA','EMPLEADO',7119,'12/10/1982',129000,0,20)
GO
17
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
18
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
Tenemos la tabla de nóminas, cada vez que un usuario acceda a ella, el trigger se activa y
almacena su nombre en otra tabla.
19
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
En este ejemplo inserto un nuevo empleado y lo que hago es mostrar el empleado insertado desde
la tabla inserted.
CREATE TRIGGER
INSERTAR_EMP INSERT INTO EMP(Emp_No, Apellido, Oficio, Dir, Fecha_Alt,
ON EMP Salario, Comision, Dept_No)
FOR INSERT VALUES(7455,'GANOZA','EMPLEADO',7902,'29/05/2015',15520,0,20)
AS
SELECT * FROM INSERTED
20
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
Como hemos visto en el ejemplo anterior, para borrar existe la tabla de sistema deleted donde
almacena los registros borrados, al igual que para insertar almacena los registros insertados en la
tabla inserted, pero para modificar no existe ninguna tabla update, lo que hace en realidad es
insertar en la tabla deleted el registro antes de ser modificado y en la tabla inserted el registro ya
modificado, porque entiende que se ha borrado un registro y se ha insertado otro.
Con lo cual para crear un trigger que se active con un update, trabajaremos con las tablas del
sistema deleted e inserted.
EJEMPLO
El siguiente ejemplo almacenará en una tabla que crearemos un registro con datos de cada fila
que borremos, modifiquemos o insertemos.
Este registro contendrá
Nº de empleado.
Usuario que realizó la consulta de acción.
Fecha de la consulta de acción.
Tipo de operación realizada.
21
UNIVERSIDAD NACIONAL JOSÉ FAUSTINO SÉNCHEZ CARRIÓN
HUACHO
Ingeniería de Sistemas - V
22