Sei sulla pagina 1di 23

Gua para el examen de

Desarrollo de Aplicaciones en
RDBMS










































[Ao]

ISRAEL ARROYO
|

Implementacin de una base de datos
1)

CREATE TABLE tipo_producto(
tipo_producto_id INT PRIMARY KEY,
Descripcion varchar (25) NOT NULL
);


INSERT INTO tipo_producto Values
(1,'windows 8'),
(2,'office 2013'),
(3,'mario bros'),
(4,'corel draw 2012');


CREATE TABLE Clientes(
Cliente_id INT PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Apellidos VARCHAR(50) NOT NULL,
RFC VARCHAR(50) NOT NULL
);



INSERT INTO Clientes Values
(1,'pedro','jimenez','ped575j'),
(2,'mario','perez','map634g'),
(3,'julia','juarez','juju6y464'),
(4,'peter','fernandez','pefe736');


CREATE TABLE Proveedor(
proveedor_id INT PRIMARY KEY,
Razon_social VARCHAR(50) NOT NULL,
Domicilio VARCHAR(50) NOT NULL,
Telefono int NOT NULL
);

INSERT INTO Proveedor Values
(1,'pedro','laguna #123 col.la villa',7654565),
(2,'mario','popotla #45 col. cebra',87565456),
(3,'julia','juan de dios # 54 col.juarez',56438767),
(4,'peter','hank gonzalez #47 col.manuel caas',5643423);

CREATE TABLE inventario(
inventario_id INT PRIMARY KEY,
fecha date NOT NULL,
cantidad int NOT NULL
);

INSERT INTO inventario Values
(1,convert(datetime,'12/09/13',3),1),
(2,convert(datetime,'18/09/13',3),1),
(3,convert(datetime,'22/09/13',3),1),
(4,convert(datetime,'29/09/13',3),1);

CREATE TABLE tipo_venta(
tipo_venta_id INT PRIMARY KEY,
Descripcion VARCHAR(50) NOT NULL,
Nombre VARCHAR(50) NOT NULL
);

INSERT INTO tipo_venta Values
(1,'nota descritivas','nota'),
(2,'factura descriptiva','factura');




CREATE TABLE Venta(
Venta_id INT PRIMARY KEY,
Fecha date NOT NULL,
total int NOT NULL,
Cliente_id INT REFERENCES Clientes(Cliente_id) NOT NULL,
tipo_venta_id INT REFERENCES tipo_venta(tipo_venta_id) NOT NULL

INSERT INTO Venta Values
(1,convert(datetime,'1/09/13',3),12,1,2),
(2,convert(datetime,'9/09/13',3),56,2,2),
(3,convert(datetime,'10/09/13',3),76,3,1),
(4,convert(datetime,'25/09/13',3),65,4,1);

CREATE TABLE Compras(
compra_id INT PRIMARY KEY,
cantidad int NOT NULL,
costo int NOT NULL,

);


INSERT INTO Compras Values
(1,4,14),
(2,9,53),
(3,5,45),
(4,8,66);


CREATE TABLE provedor_compras(
proveedor_id INT REFERENCES Proveedor(proveedor_id) NOT NULL ,
compra_id INT REFERENCES Compras(compra_id) NOT NULL
);

INSERT INTO provedor_compras Values
(1,1),
(1,2),
(2,4),
(4,2);


CREATE TABLE Productos(
Producto_id INT PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Precio_unidad int NOT NULL,

tipo_producto_id INT REFERENCES tipo_producto(tipo_producto_id) NOT NULL ,
Venta_id INT REFERENCES Venta(Venta_id ) NOT NULL,
compra_id INT REFERENCES compras(compra_id) NOT NULL,
);


INSERT INTO Productos Values
(1,'software',20,1,1,1),
(2,'juegos',200,3,2,1),
(3,'ofimatica',340,2,3,2),
(4,'programas de disenio',543,4,4,3);



CREATE TABLE inventario_producto(
inventario_id INT REFERENCES inventario(inventario_id) NOT NULL,
Producto_id INT REFERENCES Productos(Producto_id) NOT NULL,
);

INSERT INTO inventario_producto Values
(1,1),
(2,2),
(3,3),
(4,4);



2)



Operadores Relacionales y SQL


4)

create database autos
create table paises
(pais_id int not null primary key,
nombre varchar (50),
Continente varchar (50))

create table marcas
(marca_id int not null primary key,
nombre varchar (50),
pais_id int references paises (pais_id))

create table submarcas
(submarca_id int not null primary key,
marca_id int not null references marcas (marca_id),
nombre varchar (50))

create table modelos
(modelo_id int not null primary key,
submarca_id int not null references submarcas (submarca_id),
descripcion varchar (50),
anho int, costo int)

create table concesionarios
(concesionario_id int not null primary key,
nombre varchar (50),
direccion varchar (50),
CP int)

create table ciudades
(ciudad_id int not null primary key,
nombre varchar (50))

create table clientes
(RFC int not null primary key,
Razon_Social varchar (50),
ciudad_id int not null references ciudades (ciudad_id),
direccion varchar (50))

create table ventas
(codigo_venta int not null primary key,
RFC int not null references clientes (RFC),
fecha_venta date)

create table coches
(no_chasis int not null primary key,
concesionario_id int references concesionarios (concesionario_id),
modelo_id int references modelos (modelo_id),
color varchar (50),
fecha_asignacion date,
fecha_devolucion date)

CREATE TABLE detalle_venta
( codigo_venta INT REFERENCES ventas(codigo_venta) NOT NULL,
no_chasis INT REFERENCES coches(no_chasis) NOT NULL,
CONSTRAINT PKCC PRIMARY KEY(codigo_venta,no_chasis))

insert into ciudades values
(1, 'Cd. de Mxico'),
(2, 'Nueva York'),
(3, 'Paris'),
(4, 'Beijin'),
(5, 'Ro de Janeiro'),
(6, 'Sidney'),
(7, 'Honk Kong')


insert into paises values
(10, 'China', 'Asia'),
(11, 'Chile', 'America_sur'),
(12, 'Ecuador','America_sur'),
(13, 'El_Salvador', 'America_central'),
(14, 'Mexico', 'America_central'),
(15, 'Suiza', 'Europa')

insert into marcas values
(20, 'toyota', 10),
(30, 'Nissan', 11),
(40, 'Mazda', 12),
(50, 'Audi', 13),
(60, 'Renault', 14),
(70, 'Dodge', 15)


insert into submarcas values
(100, 20, 'Lexus'),
(101, 30, 'Tsuru'),
(102, 40, 'MX-5'),
(103, 50, 'A5'),
(104, 60, 'RtI'),
(105, 70, 'Ford')


insert into modelos values
(110, 100, '4 puertas, electrico, full iyection, manual', 2012, 238000),
(111, 101, '4 puertas, manual', 2003, 20500),
(112, 102, '4 puertas, electrico, full iyection, manual', 2012, 215900),
(113, 103, '2 puertas, electrico, automatico', 2010, 125000),
(114, 104, '4 puertas, electrico, full iyection, automatico', 2012, 85900),
(115, 105, '4 puertas, full iyection, automatico', 2011, 285000)

insert into concesionarios values
(120, 'san angel motors', 'revolucion 1220, guadalupe inn', 32569),
(121, 'automotores soni', 'Moras 446, Benito Juarez', 54678),
(122, 'automotriz el rosario', 'de las culturas 33, azcapotzalco', 55903),
(123, 'ford alden tlalpan', 'calzada de tlalpan 2169, coyoacan', 58976),
(124, 'monarquia automotriz', 'insurgentes sur 4017', 52018),
(125, 'kasa naucalpan', 'Manuel avila camacho 480', 56790)

insert into clientes values
(130, 'Cochecitos S.A de C.V', 1, 'Naucalpan 589'),
(131, 'First Place', 2, 'John F. Kenedy'),
(132, 'Pari', 3, 'Notre Dam'),
(133, 'AutoCar', 4, 'Seoul'),
(134, 'Auto Braz', 5, 'Londrina'),
(135, 'Sidney', 6, 'Mara Salazar'),
(136, 'HK Motors', 3, 'Honk Kong'),
(137, 'Los Juanes', 1, 'del valle 45'),
(138, 'S-A MotorCars', 6, 'Wallavy')


insert into ventas values
(140, 130, '2012-08-10'),
(141, 131, '2013-03-15'),
(142, 132, '2010-12-21'),
(143, 133, '2012-12-25'),
(144, 134, '2010-01-28'),
(145, 135, '2012-05-30'),
(146, 136, '2011-03-01'),
(147, 137, '2010-03-02'),
(148, 138, '2012-05-30'),
(149, 132, '2009-10-15'),
(150, 137, '2012-10-29'),
(151, 135, '2008-02-17'),
(152, 136, '2012-12-25'),
(153, 138, '2009-10-09'),
(154, 133, '2010-11-22'),
(155, 130, '2009-06-23')


insert into coches values
(300, 120, 110, 'rojo', '2012-09-18', null),
(301, 121, 111, 'verde', '2012-08-25', null),
(302, 122, 112, 'negro', '2009-12-30', '2010-03-01'),
(303, 123, 113, 'gris', '2010-11-13', null),
(304, 124, 114, 'azul', '2013-12-22', null),
(305, 125, 115, 'amarillo', '2010-05-25', '2010-07-05'),
(306, 123, 112, 'plata', '2013-03-20', null),
(307, 121, 115, 'cafe', '2011-10-25', null),
(308, 125, 112, 'negro', '2013-05-06', null)

insert into detalle_venta values
--(140, 300),
--(140, 303),
(141, 304),
(141, 305),
(142, 305),
(142, 308),
(143, 306),
(143, 303),
(144, 307),
(144, 301),
(144, 300),
(145, 308),
(145, 305),
(146, 306),
(146, 308),
(147, 303),
(147, 302),
(148, 305),
(148, 304),
(149, 303),
(149, 306),
(150, 302),
(150, 307),
(151, 308),
(151, 302),
(152, 302),
(152, 306),
(153, 306),
(153, 301),
(154, 303),
(154, 308),
(155, 306),
(155, 307)

Anlisis Transaccional

5)
Defina un grafo.
un grafo es una representacin grfica de diversos puntos que se conocen
como nodos o vrtices, los cuales se encuentran unidos a travs de lneas que
reciben el nombre de aristas.
6)
Que es un vrtice y un Arista.

Vrtices
Son los puntos o nodos con los que esta conformado un grafo.

Aristas
Son las lneas con las que se unen las aristas de un grafo y con la que se
construyen tambin caminos.

7)

8)
Explique la relacin entre teora de grafos y las transacciones.

Se puede observar una relacin existente en donde las transacciones la podemos ver como un
grafo y sus vrtices como los estados que se encuentre la base de datos.

9. Describa cada uno de los estados de una transaccin, y en como se relacionan entre s.

Activa (estado inicial): la transaccin permanece en este estado durante su ejecucin.
Parcialmente Comprometida: la transaccin pasa a este estado cuando acaba de realizar la
ltima instruccin.
Fallida: la transaccin pasa a este estado tras descubrir que no puede continuar la ejecucin
normal.
Abortada: la transaccin pasa a este estado despus de haber restablecido la base de datos a
su estado anterior.
Comprometida: la transaccin pasa a este estado tras completarse con xito.

Todo este conjunto de operaciones van a ser tratadas como una nica unidad y estas
transacciones deben cumplir con cuatro propiedades (atomicidad, coherencia, asilamiento y
durabilidad)

10) Explique como calculara el tamao de la base de datos actual y como planeara su
crecimiento a futuro.

Estimar el tamao de cada tabla por separado y sumaria los valores obtenidos
Planear el crecimiento dependiendo totalmente de las reglas de negocio, y tambin el tamao de
dicha empresa

11. Explique qu es una vista y cul es su funcionalidad.

La vista es una tabla virtual, que es el resultado de una consulta SQL en las que se carga los datos
en el momento de ser llamada. La vista puede tener datos de una tabla o de la agrupacin de
varias tablas.
Su funcionalidad es agilizar el proceso de consulta a una base de datos.


12. Explique en que se diferencia una vista y una tabla.

En que Los datos accesibles a travs de la vista no estn almacenados en la base de datos
La vista no permite realizar una consulta de la informacin que necesitemos , mientras que la
tabla se encuentra almacenada en la base de datos


A partir del ejercicio 4, cree una vista que muestre la submarca, marca y pas de origen para
cada modelo. Haga una consulta a dicha vista.

13-create view modelos
as
SELECT s.nombre, m.nombre, p.nombre
FROM submarcas s, marcas m, paises p
WHERE s.marca_id = m.marca_id and m.pais_id = p.pais_id

SELECT *
FROM detalle

14.Cree una vista que le muestre las ventas y su detalle. Haga una consulta a dicha vista.

--14.

Create view detalles_ventas
AS
SELECT vn.codigo_venta, co.no_chasis, co.color
FROM ventas vn, detalle_venta dv, coches co
WHERE vn.codigo_venta = dv.codigo_venta and dv.no_chasis = co.no_chasis


15. Cree una vista que le diga cuantas compras ha realizado cada cliente, solo si
dicho cliente ha comprado 2 o mas autos. Haga una consulta a dicha vista.
--15

CREATE VIEW Clientes_Frecuentes
AS
SELECT cl.RFC, count(vn.codigo_venta)
FROM clientes Cl, Ventas Vn, detalle_venta dv, coches co
WHERE cl.RFC = vn.RFC and vn.codigo_venta = dv.codigo_venta AND dv.no_chasis
= co.no_chasis
GROUP BY (cl.RFC)
HAVING COUNT(cl.RFC) >1


16. Cree una vista que muestre el nmero de autos vendidos para cada modelo.
Haga una consulta a dicha vista.

CREATE VIEW Autos_Vendidos
AS
SELECT m.modelo_id, count(co.no_chasis)
FROM ventas vn, detalle_venta dv, coches co, modelos m
WHERE vn.codigo_venta = dv.codigo_venta AND dv.no_chasis = co.no_chasis and
co.modelo_id = m.modelo_id
group by (m.modelo_id)




17. Defina que es un ndice y cual es su funcin.

Un ndice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a
travs de un campo (o campos clave).
Su funcin es: un acceso mucho ms rpido a los datos.


18. Sobre qu campos se crean ndices de manera automtica?
En los campos donde cuando se establece una restriccin "primary key" o "unique" en una tabla

19.Cree un ndice para acelerar las bsquedas por nombre de pas.

--19
CREATE INDEX Nombre_Pais
ON Paises (Nombre)

20.Cree un ndice para acelerar las bsquedas por fecha de las ventas.

--20
CREATE INDEX Indice_Fecha_Ventas
ON VEntas (Fecha_venta)






21. Explique que es un sector y una pista en un disco duro.

Un sector de un disco duro es la seccin de la superficie del mismo que corresponde al rea
encerrada entre dos lneas radiales de una pista
Pista - : Una circunferencia dentro de una cara

22. Explique cul es la funcin del bit de paridad.

Bit agregado a una unidad de datos, generalmente cada carcter, que sirve para comprobar que los datos se
transfieran sin corrupcin.



23. Explique el funcionamiento de RAID 0, RAID 1, RAID 0+1 y RAID 5, y en que casos usara cada
uno.
Uso de Variables y estructuras de control
24. Explique qu es Transact-SQL (T-SQL)
25. Explique como se declara una variable en T-SQL.
26. Explique como se actualiza el valor de una variable en T-SQL.




27. Qu realiza el siguiente cdigo?


DECLARE @Variable INT
SET @Variable = SELECT MAX(costo) FROM Modelos
PRINT El mximo es+cast(@variable as varchar(20))

Se declara la variable de tipo INT , selecciona el mximo costo y imprime un mensaje asi como la
conversin con cast de tipo int a varchar



28. Qu realiza el siguiente cdigo?
DECLARE @Variable INT SET @Variable = SELECT MAX(costo) FROM
Modelos IF (@Variable < 10000) BEGIN PRINT El mximo es menor a
10000 END ELSE PRINT El mximo es+cast(@variable as
varchar(20))

Declara una variable de tipo entero que se le asigna el resultado
de la seleccin del mximo costo de los modelos
Si el resultado es menor a 10000 muestra un mensaje que dice El
mximo es menor a 10000 en caso contrario muestra un mensaje que
dice El mximo es + @Variable

29. Qu realiza el siguiente cdigo?

DECLARE @Variable INT SET @Variable = SELECT MAX(costo) FROM
Modelos IF (@Variable < 10000) BEGIN PRINT El mximo es menor a
10000 END ELSE PRINT El mximo es+cast(@variable as
varchar(20))

Lo mismo que el anterior




30. Qu realiza el siguiente cdigo?

DECLARE @Variable INT SET @Variable = SELECT MAX(costo) FROM Modelos
DECLARE @cont int SET @cont = 0 WHILE (@cont < @Variable) BEGIN PRINT El
precio es mayor a + cast(@cont as varchar(20)) SET @cont=@cont+100 END

Declara una variable y se le asigna el resultado del costo maximo de los
modelos

Se declara otra variable llamada cont se le asigna el valor de cero,
existe una condicional MIENTRAS @con sea menor a @variable
Aparecer un mensaje que dice El precio es mayor a @cont



31. Explique que es una secuencia y de 3 casos en los que pudiera usarlos.

es una tabla con un campo numrico en el cual se almacena un valor y cada
vez que se consulta, se incrementa tal valor para la prxima consulta.

para generar valores enteros secuenciales nicos y asignrselos a campos
numricos
generalmente para las claves primarias de las tablas garantizando que sus
valores no se repitan.


32. Cree una secuencia que incremente de 5 en 5, e inicie en 3.

CREATE SEQUENCE cincos
START WITH 3
INCREMENT BY 5
MIN VALUE
MAXVALUE


33. Cree una secuencia que le ayude a enumerar los valores entre 0 y 100 que sean divisibles
entre 4.

CREATE SEQUENCE SANDIA
START WITH 0
INCREMENT BY 4
MAXVALUE 100

34. Cree una secuencia que inicie en 2, incremente en 6, al llegar a 122, reinicie en 0.

CREATE SEQUENCE ALAW
START WITH 2
INCREMENT BY 6
MIN VALUE 0
MAXVALUE 122
CYCLE









35. Explique la funcionalidad de los cursores, y al menos 3 aplicaciones de los mismos.

son utilizados para realizar operaciones con los registros devueltos tras ejecutar una sentencia
SELECT.

Se usan
Cursores explcitos:
Se utilizan cuando la sentencia SELECT puede devolver varios registros.

Cursores implcitos Se utilizan cuando la sentencia SELECT devuelve un
solo registro


36. Cree un cursor que muestre los modelos por cad marca y submarca de la siguiente manera:

--36.

DECLARE @marca varchar(50)
DECLARE @submarca varchar(50)
DECLARE @modelo varchar(50)

DECLARE detalle_autos CURSOR
FOR

SELECT m.nombre, s.nombre, mo.anho
FROM marcas m, submarcas s, modelos mo
where m.marca_id = s.marca_id and s.submarca_id=mo.submarca_id
OPEN detalle_autos
FETCH detalle_autos INTO @marca, @modelo, @submarca
WHILE (@@FETCH_STATUS=0)
BEGIN

PRINT 'Marca: ' + @marca + ' Submarca: ' + @submarca +' Modelo: ' +
@modelo

FETCH detalle_autos INTO @marca, @submarca, @modelo
END
CLOSE detalle_autos
DEALLOCATE detalle_autos


37. Cree un cursor que muestra la siguiente informacin para todas y cada una de las ventas:

DECLARE @codigo_venta varchar(50)
DECLARE @descripcion varchar(50)

DECLARE todas_ventas CURSOR
FOR

SELECT codigo_venta
FROM ventas
OPEN todas_ventas
FETCH todas_ventas INTO @codigo_venta
WHILE (@@FETCH_STATUS=0)
BEGIN

PRINT @codigo_venta

DECLARE cursor_int CURSOR
FOR
SELECT descripcion
FROM Modelos m, Coches co, Detalle_venta dv
WHERE co.modelo_id = m.modelo_id and dv.no_chasis = co.no_chasis AND
dv.codigo_venta = @codigo_venta
Group by descripcion
OPEN cursor_int
FETCH cursor_int into @descripcion
while (@@fetch_status = 0)
BEGIN
print 'modelo: ' + @descripcion
fetch cursor_int into @descripcion
END
CLOSE cursor_int
DEALLOCATE cursor_int
fetch todas_ventas into @codigo_venta

END
CLOSE todas_ventas
DEALLOCATE todas_ventas


38. Cree un cursor que muestre la siguiente informacin:

DECLARE @nombre varchar(50)
DECLARE @direccion varchar(50)
DECLARE @concesionario_id int
DECLARE @desc varchar(50)
DECLARE @cantidad int

Declare reporte cursor
for
SELECT concesionario_id, nombre, direccion
FROM concesionarios
OPEN reporte
fetch reporte into @concesionario_id, @nombre, @direccion
while (@@fetch_status=0)
BEGIN
print @nombre + @direccion
Declare cursor_int cursor
for
select m.descripcion, count(*)
from modelos m, coches co
where m.modelo_id = co.modelo_id and co.concesionario_id =
@concesionario_id
group by descripcion
OPEN cursor_int
fetch cursor_int into @desc, @cantidad
while(@@fetch_status=0)
BEGIN
print @desc
print @cantidad
fetch cursor_int into @desc, @cantidad
END
Close cursor_int
deallocate cursor_int
fetch reporte into @concesionario_id, @nombre, @direccion
END
Close reporte
deallocate reporte

39. Cree un reporte que le muestre el total de las ventas de cada concecionario en el ltimo ao.



40. Explique que es y para que sirve un Trigger.
Un trigger( o desencadenador) es una clase especial de procedimiento almacenado que se ejecuta
automticamente cuando se produce un evento en el servidor de bases de datos.

41. Explique en que etapa de la transaccin se ejecuta un Trigger.
De la parcialmete comprometida a la comprometida

42. De 5 ejemplos del uso de un Trigger.

1) podemos crear un trigger que cada vez que se inserte un nuevo registro envie un mail de aviso
al webmaster del web

2) Desde el Trigger podremos obtener los datos de la fila que se ha modificado o aadido
utilizando inserted o deleted:


3) imprime un mensaje en el cliente cuando alguien intenta agregar o
cambiar datos en la tabla Customer.
4) un trigger DDL para impedir que se quiten sinnimos
en una base de datos
5) un trigger DDL para imprimir un mensaje si se
produce un evento CREATE DATABASE


43) Cree un trigger que evite que en la tabla paises se inserte un contiente que no sea Amrica,
Asia o Europa.

create trigger discriminado

ON Paises
FOR INSERT
AS
DECLARE @pais_discriminado varchar (50)

DECLARE paises_discriminados CURSOR
FOR SELECT Continente
FROM INSERTED
WHERE Continente IN ( 'America',
'ASIA',
'EUROPA')
OPEN paises_discriminados
FETCH paises_discriminados INTO @pais_discriminado
WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT 'Se Inserto un Pais que no se le quiere'+@pais_discriminado
FETCH paises_discriminados INTO @pais_discriminado
END
CLOSE paises_discriminados
DEALLOCATE paises_discriminados

44) Cree un trigger que evite que en la tabla modelos se ingrese un registro con un costo menor a
10000.

CREATE TRIGGER trigger_costo
ON modelos
FOR insert, update
as
Declare @modelo_id int Declare @costo int
Declare cursor_costo CURSOR FOR SELECT modelo_id ,costo
FROM INSERTED open cursor_costo
FETCH cursor_costo INTO @modelo_id , @costo
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF @costo < 100000 PRINT 'NO SE PUEDE INGRESAR REGISTRO CON MENOR A 100000'
FETCH cursor_costo INTO @modelo_id , @costo
END
CLOSE cursor_costo
DEALLOCATE cursor_costo


45. Cree un trigger que mande un mensaje a pantalla indicando cuando se haya actualizado un
valor en la tabla ciudades.




create trigger avisador
ON Ciudades
FOR INSERT
As
DECLARE @Ciudad_ID int
DECLARE @Nombre varchar (40)

DECLARE Cursor_trigger CURSOR
FOR SELECT Ciudad_ID, Nombre
FROM INSERTED
OPEN Cursor_trigger
FETCH Cursor_trigger INTO @Ciudad_ID, @Nombre

WHILE (@@FETCH_STATUS=0)
BEGIN
PRINT 'Se ha insertado una ciudad'+ @Ciudad_ID
PRINT 'El nombre de la ciudad es' + @Nombre
FETCH Cursor_trigger INTO @Ciudad_ID, @Nombre
END
CLOSE Cursor_trigger
DEALLOCATE Cursor_trigger



46. Cree una Cree un Trigger que obligue a que al insertar un dato en la tabla ciudades, se tenga
que usar la secuencia del ejercicio 32 de esta gua.


CREATE SEQUENCE ej32
START WITH 3
INCREMENT BY 5
MINVALUE 3

CREATE Trigger secuencia_ciudades
ON Ciudades
FOR INSERT
AS
DECLARE @ciudad_id int
DECLARE @nombre varchar(50)
DECLARE @new_id int

DECLARE secuencia_ciudades CURSOR
FOR

SELECT ciudad_id, nombre
FROM inserted
Open secuencia_ciudades
FETCH secuencia_ciudades into @ciudad_id, @nombre
while (@@fetch_status=0)
BEGIN
SET @new_id = NEXT VALUE FOR ej32
update ciudades
SET ciudad_id = @new_id
WHERE ciudad_id = @ciudad_id
FETCH secuencia_ciudades into @ciudad_id, @nombre
END
Close secuencia_ciudades
Deallocate secuencia_ciudades
GO


47. Cree un Trigger que mande un Warning en caso de que se asigne un auto a cualquier
concesionaria, si esta ya tiene al menos 2 autos del mismo modelo.



CREATE TRIGGER warning
ON concesionarios
FOR INSERT
AS
DECLARE @modelo_id INT
DECLARE @count INT

DECLARE curs1 cursor
FOR
SELECT mo.modelo_id, COUNT (*) as total
FROM Concesionarios cn, coches co, modelos mo
WHERE co.concesionario_id = cn.concesionario_id and co.modelo_id = mo.modelo_id
GROUP BY mo.modelo_id
OPEN curs1
FETCH curs1 into @modelo_id, @count
WHILE (@@fetch_status=0)
BEGIN

IF (@count >= 2)
print 'Atencion, este concesionario tiene al menos 2 autos del mismo modelo: ' +
@modelo_id

FETCH curs1 into @modelo_id, @count
END
CLOSE curs1
DEALLOCATE curs1

48. Cree un Trigger que evite que una venta tenga mas de 5 coches en la misma.

create trigger evitar_venta

ON coches
FOR INSERT , update
AS
DECLARE @ventas varchar (50)

DECLARE menos_ventas CURSOR
FOR
SELECT ve.codigo_venta , count(*)
FROM ventas ve , detalle_venta dv ,coches co
WHERE co.no_chasis = dv.no_chasis and dv.codigo_venta = ve.codigo_venta
group by ve.codigo_venta
OPEN paises_discriminados
FETCH menos_ventas INTO @ventas
WHILE (@@FETCH_STATUS = 0)
BEGIN
if @ventas >= 5
PRINT 'no puede tener mas de 5 ventas '
END
CLOSE menos_ventas
DEALLOCATE menos_ventas



49. Cree un trigger que enve un correo electrnico cuando se cree una tabla en la base de datos.



Stored Procedures
50. Explique que es un procedimiento almacenado.
51. Enuncie al menos 5 posibles utilidades de un procedimiento almacenado.