Sei sulla pagina 1di 37

TALLER DE BASE DE

DATOS

Clase N° 08

14– ABRIL - 2020


CONDICIONES FAVORABLES PARA LA CLASE

Mantén todos tus


sentidos activos

Práctica la puntualidad

Mantén tus dispositivos


electrónicos en silencio

Respeta el turno de
participación
PRESENTACIÓN DE LA CLASE
Aprendizaje Esperado: Gestionan bases de datos utilizando software de aplicación de base de
datos según requerimientos.

Criterios de Evaluación: Crea procedimientos almacenados en SQL según requerimientos.

Contenidos: Comandos de creación y llamada de procedimientos almacenados.


MOMENTO PARA RECORDAR
SINTAXIS
• CREATE DATABASE Nombre_de_la_base_de_datos --Crear una base de datos

• USE Nombre_de_la_base_de_datos --Poner en uso la base de datos

• CREATE TABLE Nombre_de_la_tabla --Crear una tabla

• ALTER TABLE Nombre_de_la_tabla


• ADD nombre_nuevo_campo tipo_dato Nombre_del_campo tipo de dato --Crear un nuevo campo

• ALTER TABLE Nombre_de_la_tabla


• ADD nombre_nuevo_campo tipo_dato
• CONSTRAINT NOMBRERESTRICCION TIPO

• ALTER TABLE Nombre_de_la_tabla


• DROP COLUMN nombre_nuevo_campo tipo_dato
• CONSTRAINT pk_referencia PRIMARY KEY (nombre del campo) --Declarar una llave primaria

• CONSTRAINT pf_referencia FOREIGN KEY (nombre_del_campo) REFERENCES nombre_de_la_tabla (nombre_del_campo) ON DELETE CASCADE
--Declarar llave foranea
• CONSTRAINT pf_referencia FOREIGN KEY (nombre_del_campo) REFERENCES nombre_de_la_tabla (nombre_del_campo) ON DELETE SET NULL
--Declara llave foranea

• INSERT INTO nombre_tabla VALUES(valor1, valor2, valor3) -Insertar datos en una tabla

• SELECT campos FROM nombre_tabla --Consulta de datos


• SELECT campos FROM nombre_tabla INNER JOIN nombre_tabla2 ON nombre_tabla.campo = nombre_tabla2.campo
--Consulta compuesta de datos

• SELECT campos FROM nombre_tabla WHERE campo = valor --Búsqueda de un registro.


• SELECT campos FROM nombre_tabla INNER JOIN nombre_tabla2 ON nombre_tabla.campo = nombre_tabla2.campo WHERE
campo = valor --Búsqueda compuesta de un registro.

• UPDATE nombre_tabla SET nombre_campo = valor, nombre_campo2 = valor WHERE llave_primaria = valor --Actulizar un registro.

• DELETE FROM nombre_de_la_tabla WHERE llave_primaria = valor --Eliminar un registro


CONSULTAS COMPUESTAS - COMANDO INNER-JOIN

• En el modelo de bases de datos relacionales, se recurre a las sentencias JOIN de SQL para


consultar diferentes tablas de bases de datos.
• Un join es una operación que relaciona dos o más tablas para obtener un resultado que
incluya datos (campos y registros) de ambas; las tablas participantes se combinan según los
campos comunes a ambas tablas.
• Hay tres tipos de combinaciones:
1. combinaciones internas (inner join o join),
2. combinaciones externas y
3. combinaciones cruzadas.
• También es posible emplear varias combinaciones en una consulta "select", incluso puede
combinarse una tabla consigo misma.
• La combinación interna emplea "join", que es la forma abreviada de "inner join". Se emplea
para obtener información de dos tablas y combinar dicha información en una salida.
COMANDO INNER-JOIN

La sintaxis básica es la siguiente:

SELECT Campos
FROM Tabla1 JOIN Tabla2
ON Condiciondecombinacion;

SELECT *
FROM tabla1 INNER JOIN tabla2
WHERE/ON tabla1.columna1 = tabla2.columna1
COMANDO INNER-JOIN
EJEMPLO IMPLEMENTACIÓN INNER-JOIN

CREATE DATABASE EjemploIner


Use EjemploIner

CREATE TABLE departamento


(
dep int,
departamento varchar(10),
constraint pk_idd primary key (dep)
)
EJEMPLO IMPLEMENTACIÓN INNER-JOIN

CREATE TABLE personas


(
per int,
nombre varchar(10),
apellido1 varchar(10),
apellido2 varchar(10),
dep int,
constraint pk_per primary key (per),
constraint fk_idp foreign key (dep) REFERENCES departamento (dep) ON DELETE CASCADE
)
COMANDO INNER JOIN
• Cargamos los siguientes datos en las tablas en vista diseño

SELECT nombre, apellido1, departamento FROM personas


INNER JOIN departamento
ON personas.dep = departamento.dep
DIAGRAMA ENTIDAD-RELACIÓN BIBLIOTECA
EJEMPLO 2 INNER-JOIN CASO BIBLIOTECA

CREATE TABLE Autores_Lib


(
ISBN1 int,
Id_autor1 int,
constraint fk_isbn1 foreign key (ISBN1) REFERENCES Libros (ISBN) ON DELETE CASCADE,
constraint fk_ida1 foreign key (Id_autor1) REFERENCES Autores (Id_autor) ON DELETE
CASCADE
)

INSERT INTO Autores_Lib VALUES (123456789, 2)


INSERT INTO Autores_Lib VALUES (987654321, 1)
INSERT INTO Autores_Lib VALUES (567891234, 3) /*no es posible que modifiquemos el registro
del código ISBN 567891234 ya que fue eliminado en un ejercicio anterior*/
EJEMPLO 2 INNER-JOIN CASO BIBLIOTECA

CREATE TABLE Prestamo


(
Fecha_pre datetime,
Fecha_ent datetime,
No_ejemplar int,
Deteriorado varchar(5),
Fecha_entregado datetime,
Cod_socio1 int,
ISBN2 int,
constraint fk_cs1 foreign key (Cod_socio1) REFERENCES Socio (Cod_socio) ON DELETE SET
NULL,
constraint fk_isbn2 foreign key (ISBN2) REFERENCES Libros (ISBN) ON DELETE CASCADE
)
EJEMPLO 2 INNER-JOIN CASO BIBLIOTECA

INSERT INTO Prestamo VALUES ('12/12/12', '19/12/12', 2, 'No', '', 101, 987654321)
INSERT INTO Prestamo VALUES ('13/12/12', '20/12/12', 1, 'Si', '', 100, 123456789) /*no es
posible que modifiqueos el registro del código 100 ya que fue eliminado en un ejercicio anterior */
INSERT INTO Prestamo VALUES ('14/12/12', '21/12/12', 2, 'No', '', 102, 123456789)

SELECT * FROM Prestamo


EJEMPLO 2 INNER-JOIN CASO BIBLIOTECA

SELECT Cod_socio, Nom_socio, Tel_socio, Fecha_pre, Fecha_ent, No_ejemplar,


Fecha_entregado, Titulo_lib, Editorialbeta
FROM Socio INNER JOIN Prestamo ON Socio.Cod_socio = Prestamo.Cod_socio1
INNER JOIN Libros ON Libros.ISBN = Prestamo.ISBN2
INNER JOIN Editorial ON Libros.Id_editorial1 = Editorial.Id_editorial where Cod_socio = 102
EJEMPLO 2 INNER-JOIN CASO BIBLIOTECA
UPDATE Prestamo SET Fecha_pre = ‘21/12/20', Fecha_ent = ‘21/12/20', No_ejemplar = 4, Deteriorado =
'No', Fecha_entregado = ‘20/12/20', Cod_socio1 = 101, ISBN2 = 987654321 WHERE Cod_socio1 = 101

UPDATE Prestamo SET Fecha_entregado = '19/12/12'


WHERE Cod_socio1 = 100 /*no es posible que modifiquemos el registro del codigo 100 ya que fue
eliminado en un ejercicio anterior*/

UPDATE Prestamo SET Fecha_entregado = '20/12/12', ISBN2 = 567891234


WHERE Cod_socio1 = 102
MOMENTO PARA CONOCER
SINTAXIS
/*CREAR UNA BASE DE DATOS CREATE DATABASE Nombre_de_la_base_de_datos */

/* PONER EN USO LA BASE DE DATOS USE Nombre_de_la_base_de_datos */

/* CREAR TABLA CREATE TABLE Nombre_de_la_tabla */

/*INSERTAR DATOS INSERT INTO Tabla VALUES (valores, valores, valores...) */

/*CONSULTA DE DATOS SIMPLES SELECT Campos FROM Tabla */

/*CONSULTA DE DATOS COMPUESTA


SELECT Campos FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.campo_union = Tabla2.campo_unión */

/*BUSQUEDA SIMPLE DE UN REGISTRO SELECT Campos FROM Tabla WHERE Campo = valor */

/*BUSQUEDA COMPUESTA DE UN REGISTRO


SELECT Campos FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.campo_union = Tabla2.campo_union WHERE Campo = Valor */
SINTAXIS
/
*ACTUALIZAR UN REGISTRO
UPDATE Tabla SET Campo = Valor, Campo = Valor WHERE Campo_llave_primaria = Valor */

/*ELIMAR UN REGISTRO
DELETE FROM Tabla WHERE Campo_llave_primaria = valor */

/*PROCEDIMIENTO ALMACENADO (ejemplo) CREATE PROC


CREATE PROCEDURE Nom_Procedimiento @Nom_parametro1 tipo_de_dato, @Nom_parametro2 tipo_de_dato
AS INSERT INTO Tabla VALUES (@Nom_parametro1, @Nom_parametro2) */

/* LLAMADA A PROCEDIMIENTO EXEC


EXECUTE Nom_Procedimiento valor_parametro1, valor_parametro2 */
PROCEDIMIENTO ALMACENADO
SQL Server ofrece dos alternativas para asegurar la integridad de datos, la integridad:
1) DECLARATIVA, mediante el uso de restricciones (constraints), valores predeterminados
(defaults) y reglas (rules) y
2) PROCEDIMENTAL, mediante la implementación de procedimientos almacenados y
desencadenadores (triggers).
Nos detendremos ahora en procedimientos almacenados.
Un procedimiento almacenado es un conjunto de instrucciones a las que se les da un nombre,
que se almacena en el servidor. Permiten encapsular tareas repetitivas.
Al crear un procedimiento almacenado, las instrucciones que contiene se analizan para verificar
si son correctas sintácticamente. Si no se detectan errores, SQL Server guarda el nombre del
procedimiento almacenado en la tabla del sistema "sysobjects" y su contenido en la tabla del
sistema "syscomments" en la base de datos activa. Si se encuentra algún error, no se crea.
Un procedimiento almacenados puede hacer referencia a objetos que no existen al momento de
crearlo. Los objetos deben existir cuando se ejecute el procedimiento almacenado.
PROCEDIMIENTO ALMACENADO
Ventajas:
• Comparten la lógica de la aplicación con las otras aplicaciones, con lo cual el acceso y las
modificaciones de los datos se hacen en un solo sitio.
• Permiten realizar todas las operaciones que los usuarios necesitan evitando que tengan acceso directo
a las tablas.
• Reducen el tráfico de red; en vez de enviar muchas instrucciones, los usuarios realizan operaciones
enviando una única instrucción, lo cual disminuye el número de solicitudes entre el cliente y el servidor.
Los procedimientos almacenados se crean en la base de datos seleccionada.
Los procedimientos almacenados pueden hacer referencia a tablas, vistas, a funciones definidas por el
usuario, a otros procedimientos almacenados y a tablas temporales.
Un procedimiento almacenado pueden incluir cualquier cantidad y tipo de instrucciones, excepto:
create default, create procedure, create rule, create trigger y create view
Se pueden crear otros objetos (por ejemplo índices, tablas), en tal caso deben especificar el nombre del
propietario; se pueden realizar inserciones, actualizaciones, eliminaciones, etc.
PROCEDIMIENTO ALMACENADO
Para crear un procedimiento almacenado empleamos la instrucción "CREATE PROCEDURE“, “CREATE
PROC”.
La sintaxis básica parcial es:
CREATE PROCEDURE Nombre_procedimiento
AS Instrucciones;

Por ejemplo:

CREATE PROCEDURE pa_libros_limite_stock


AS select *from libros
where cantidad <=10;

Para ejecutar el procedimiento almacenado creado anteriormente tipeamos EXECUTE, EXEC:

EXEC pa_libros_limite_stock
PROCEDIMIENTO ALMACENADO
PROCEDIMIENTO ALMACENADO
Los procedimientos almacenados se eliminan con "DROP PROCEDURE".
Sintaxis:

DROP PROCEDURE Nombre_procedimiento;

Eliminamos el procedimiento almacenado llamado "pa_libros_autor":

DROP PROCEDURE pa_libros_autor;


Si el procedimiento que queremos eliminar no existe, aparece un mensaje de error, para
evitarlo, podemos emplear esta sintaxis:

if object_id('Nombre_procedimiento') is not null


drop procedure Nombre_procedimiento;
PROCEDIMIENTO ALMACENADO
Eliminamos, si existe, el procedimiento "pa_libros_autor", si no existe, mostramos un mensaje:

if object_id('pa_libros_autor') is not null


drop procedure pa_libros_autor
else
select 'No existe el procedimiento "pa_libros_autor"‘

Nota: Se recomienda ejecutar el procedimiento almacenado del sistema "sp_depends" para ver si algún objeto
depende del procedimiento que deseamos eliminar.
Podemos eliminar una tabla de la cual dependa un procedimiento, SQL Server lo permite, pero luego, al ejecutar el
procedimiento, aparecerá un mensaje de error porque la tabla referenciada no existe.
PROCEDIMIENTO ALMACENADO
Los procedimientos almacenados pueden recibir y devolver información; para ello se emplean
parámetros, de entrada y salida, respectivamente.

Los parámetros de entrada posibilitan pasar información a un procedimiento.


Para que un procedimiento almacenado admita parámetros de entrada se deben declarar
variables como parámetros al crearlo. La sintaxis es:

CREATE PROCEDURE Nombre_procedimiento @Nombre_parametro TIPO =Valor_por_defecto


AS Sentencias

• Los parámetros se definen luego del nombre del procedimiento, comenzando el nombre con
un signo arroba (@).
• Los parámetros son locales al procedimiento, es decir, existen solamente dentro del mismo.
• Pueden declararse varios parámetros por procedimiento, se separan por comas
PROCEDIMIENTO ALMACENADO
Por ejemplo:

CREATE PROCEDURE pa_libros_autor @autor varchar(30)


AS SELECT titulo, editorial,precio
FROM libros WHERE autor= @autor

El procedimiento se ejecuta colocando "EXECUTE" (o "exec") seguido del nombre del


procedimiento y un valor para el parámetro:

EXECUTE pa_libros_autor 'Borges'


PROCEDIMIENTO ALMACENADO
Por ejemplo:

CREATE PROCEDURE pa_libros_autor_editorial @autor varchar(30), @editorial varchar(20)


AS SELECT titulo, precio
FROM libros WHERE autor= @autor and editorial=@editorial
Para ejecutarlo:
EXECUTE pa_libros_autor_editorial 'Richard Bach','Planeta‘

EXECUTE pa_libros_autor_editorial @editorial='Planeta', @autor='Richard Bach‘


Cuando pasamos valores con el nombre del parámetro, el orden en que se colocan puede
alterarse
PROCEDIMIENTO ALMACENADO
Crear un procedimiento en la base de datos Biblioteca

CREATE PROCEDURE Insertar_Prestamo @F_pre datetime, @F_ent datetime, @No_ejem


int, @Det varchar(5), @F_entregado datetime, @Cod_s1 int, @ISBN2 int
AS
INSERT INTO Prestamo VALUES (@F_pre, @F_ent, @No_ejem, @Det, @F_entregado,
@Cod_s1, @ISBN2)

Ejecutar el procedimeinto con los parametros:

EXECUTE Insertar_Prestamo '15/12/12','22/12/12', 4, 'Si', '', 102, 123456789


PROCEDIMIENTO ALMACENADO
PROCEDIMIENTO ALMACENADO

CREATE PROCEDURE ConsultarS_Prestamo


AS
SELECT * FROM Prestamo

Ejecutar el procedimeinto con los parametros:

EXEC ConsultarS_Prestamo
PROCEDIMIENTO ALMACENADO
PROCEDIMIENTO ALMACENADO

CREATE PROCEDURE BuscarS_Prestamo @C_socio int


AS
SELECT * FROM Prestamo WHERE Cod_socio1 = @C_socio

Ejecutar el procedimeinto con los parametros:

EXEC BuscarS_Prestamo 102


PROCEDIMIENTO ALMACENADO
MOMENTO PARA APLICAR
MICROSOFT SQL SERVER MANAGEMENT STUDIO

Ejecutar las siguientes instrucciones en la base de datos Biblioteca y capturar pantalla con
datos de salida y procedimiento almacenado en el explorador de objetos

CREATE PROCEDURE Actcualizar_Prestamo @F_entregado datetime, @F_pre datetime,


@Cod_s1 int, @ISBN2 int
AS
UPDATE Prestamo SET Fecha_entregado = @F_entregado WHERE Fecha_pre = @F_pre
AND Cod_socio1 = @Cod_s1 AND ISBN2 = @ISBN2

EXEC Actcualizar_Prestamo '20/12/12', '15/12/12', 102, 123456789


MOMENTO PARA RETROALIMENTAR
MUCHAS GRACIAS

Potrebbero piacerti anche