Sie sind auf Seite 1von 8

1.

PROCEDIMIENTO
Para el Desarrollo de cada uno de los ejercicios tenga en cuenta el siguiente
procedimiento:
1.Leer detenidamente cada enunciado.
2.Identificar las entidades.
3.Identificar los Argumentos, con su respectivo tipo de Dato.
4.Identificar las instrucciones manejadas por el Lenguaje Transaccional.
5.Construir las instrucciones necesarias para la manipulacin de la base de datos
propuesta en este laboratorio, aplicando Lenguaje Transaccional.
6. Presentar la solucin a cada ejercicio empleando la sintaxis definida en el
objeto de aprendizaje Aplicar el lenguaje transaccional para la implementacin de
funcionalidades en el SGBD.
7.Copiar el cdigo SQL, en un nico documento, el cual debe contener el enunciado y
la solucin de cada enunciado.
8.Guardar el archivo con el cdigo SQL, en formato txt con el nombre
Solucion_Laboratorio_LenguajeTransaccional.
Ejercicios:
Utilizando instrucciones SQL, realice las siguientes actividades:
Tomando como referencia, las entidades construidas en el laboratorio12_SQL:

1.Construya los siguientes procedimientos Almacenados para insercin de registros:


En MySQL; para las tablas Profesor, Curso, Estudiante, Estudiantexcurso.
use laboratoriosql;
show full tables;
delimiter //
create procedure profesor (in docprof varchar (11), in nomprof varchar (30),
apeprof varchar (30), in cateprof int (11), in salprof int (11))
begin
insert into profesor (doc_prof, nom_prof, ape_prof, cate_prof, sal_prof)
values (docprof, nomprof, apeprof, cateprof, salprof);
end //
call profesor ("71371808","jorge","lujan",3,9500000);

delimiter //
create procedure curso (in cod int (11), in nomb varchar (100), in horas int (11),
in valor int (11))
begin
insert into curso (cod_curs, nom_curs, horas_curs, valor_curs)
values (cod, nomb, horas, valor);
end//
call curso (72943,"procedimientosalmacenados",20,500000);

delimiter //
create procedure estudiante (in doc int (11), in nom varchar (30), in ape varchar
(30), in edad int (11))
begin
insert into estudiante (doc_est, nom_est, ape_est, edad_est)
values (doc, nom, ape, edad);
end//
call estudiante(1037588473,"leidy","posada",29);

delimiter //
create procedure Estudiantexcurso (in cod int (11), in est int (11), in fecha
date)
begin
insert into Estudiantexcurso (cod_cur_estcur, doc_est_estcur, fec_ini_estcur)
values (cod, est, fecha);
end//
call Estudiantexcurso (72943,1037588473,"2014-02-06");

En ORACLE; para las tablas Cliente, Articulo, Pedido.


delimiter //
create procedure cliente (in id int (11), in nom varchar (30), in ape varchar
(30), in dir varchar (100), in dep varchar (20), in mes varchar (10))
begin
insert into cliente (id_cli, nom_cli, ape_cli, dir_cli, dep_cli_ ,mes_cli)
values (id_cli,nom,ape,dir,deo,mes);
end//
call cliente ("22446181","ana","diaz","cra 22A #80-09", "atlantico","agosto");

delimiter //
CREATE PROCEDURE ARTICULO (in IdeArticulo int,in TitArticulo VARCHAR(100),in
AutArticulo VARCHAR(100),in EdiArticuloIN VARCHAR(300), in PrecArticulo int)
begin
insert into cliente (id_art, tit_art, aut_art, edi_art, pre_art)
values (IdeArticulo, TitArticulo, AutArticulo, EdiArticulo, PrecArticulo);
end//
call ARTICULO ('6', 'administracion de compu', 'lady posada', 'alfa', '50000');

delimiter //
CREATE PROCEDURE PEDIDO (in IdePedido int, in IdeCliPedido varchar(11), in
FechaPedido DATE, in ValPedido int)
begin
insert into pedido (id_ped, id_cliped, fec_ped, val_ped)
values (IdePedido, IdeCliPedido, FechaPedido, ValPedido);
end//
call PEDIDO (5, '1037588473', '2017-07-18', 550000)
En el Motor de su preferencia (ORACLE O MySQL), para las tablas, Compaa,
TiposAutomotores, Automotores, Aseguramientos,
Incidentes.
delimiter //
create procedure compaa (in nit varchar (11), in nomb varchar (30), in ao int
(11), in repre varchar(100))
begin
insert into compaa (comnit, comnombre, comaofun, comreplegal)
values (nit, nomb, ao, repre);
end//

delimiter //
create procedure Tipodeautomotores (in tipo int (11), in nomb varchar (30))
begin
insert into Tipodeautomotores (auttipo, autnombre)
values (tipo, nomb);
end//
call Tipodeautomotores (4,'autobuses');

delimiter //
CREATE PROCEDURE Automotores (in placa varchar (6), in marca varchar (150), in tipo
varchar (100), in modelo varchar (100), in NoPasajeros int (3), in cilindraje int
(6), in chasis varchar(100))
begin
insert into tiposautomotores (autoplaca, automarca, autotipo, automodelo,
autonumpasajeros, autocilindraje, autonumchasis)
values (placa, marca, tipo, modelo, NoPasajeros, cilindraje, chasis);
end//
call Automotores ('FDT650','MERCEDES',4,2010,45,12300,'wywzzz127kk009f95');
delimiter //
create procedure aseguramientos (in inicio date, in fin date, in valor int, in
estado varchar (25), in placa varchar (25), in costo int)
begin
insert into aseguramientos (Asefechainicio, asefechaexpiracion, asevalorasegurado,
aseestado, asecosto, Aseplaca)
values (incio,fin,valor,estado,placa,costo);
end//
call asegura ('2013-08-12', '2014-08-12', 60000000, 'Vigente', 'FDT650', 1200000);

delimiter //
create procedure incidente (in fecha date, in placa varchar (6), in lugar varchar
(40), in heridos int, in fatalidades int, autos int)
begin
insert into incidentes (incifecha, inciplaca, incilugar, incicantheridos,
incicantfatalidades, incicantautosinvolucrados)
values (fecha, placa, lugar, heridos, fatalidades, autos);
end//
call incidente ('2013-09-15', 'FDT650', 'Barranquilla', 1, 0, 2);

2.En Oracle construya los procedimientos almacenados para realizar los siguientes
procesos:
Muestre los salarios de los profesores ordenados por categora.
delimiter //
create procedure salarioprofesor ()
begin
select sal_prof
from profesor order by cate_prof;
end//
call salarioprofesor;

Muestre los cursos cuyo valor sea mayor a $500.000.


delimiter //
create procedure valorcurso()
begin
select nom_cur from curso where valor_curs >=500000;
end//
call valorcurso;

Visualizar el nombre, apellido y direccin de todos aquellos clientes que hayan


realizado un pedido el da 25 /02/2012.
delimiter //
create procedure pedido02252012()
begin
select cliente.nom_vli,cliente.ape_cli,cliente.dir_cli
from cliente,pedido where pedido.fec_ped = '02/25/2012'
; end//
call pedido02252012;
Listar todos los pedidos realizados incluyendo el nombre del artculo.
delimiter //
Create PROCEDURE todospedidos()
BEGIN
SELECT pedido.id_ped, pedido.id_cli_ped, pedido.fec_ped, pedido.val_ped,
articulo.tit_art
FROM pedido, articulo;
END //
call todospedidos();
Listar los todos datos de los automotores cuya pliza expira en octubre de 2013,
este reporte debe visualizar la placa, el modelo, la marca, nmero de pasajeros,
cilindraje nombre de automotor, el valor de la pliza y el valor asegurado.
delimiter //
Create PROCEDURE polizaoctubre()
BEGIN
SELECT automotores.autoplaca, automotores.automodelo, automotores.automarca,
automotores.autonumpasajeros, automotores.autocilindraje, automotores.autotipo,
aseguramientos.asecosto, aseguramientos.asevalorasegurado
FROM automotores, aseguramientos
WHERE aseguramientos.asefechaexpiracion>'09/30/2013' AND
aseguramientos.asefechaexpiracion<'11/01/2013';
END //
call polizaoctubre();

3.En MySQL construya los procedimientos almacenados para realizar los siguientes
procesos:
Muestre todos los campos de la tabla curso en orden ascendente segn el valor.
delimiter //
CREATE PROCEDURE `cursoascendente`() NOT DETERMINISTIC CONTAINS SQL SQL SECURITY
DEFINER
Select * from curso ORDER BY valor_cur ASC;
end //
call cursoascendente();
Mostrar los pedidos con los respectivos artculos (cdigo, nombre, valor y
cantidad pedida).
delimiter //
Create procedure pedidosyarticulos()
Select pedido.id_ped,pedido.id_cli_ped, pedido.fec_ped,
pedido.val_ped,articulo.id_art, articulo.tit_art,
articulo.prec_art,articuloxpedido.can_art_artped
from pedido, articulo,articuloxpedido;
end //
call pedidosyarticulos()
Visualizar los datos de las empresas fundadas entre el ao 1991 y 1998.
delimiter //
CREATE PROCEDURE empresafundada() SELECT * FROM compaia WHERE comaofun>=1991 AND
comaofun<=1998;
end //
call empresafundada()
Visualizar todos los clientes organizados por apellido.
delimiter //
Create procedure apellidosclientes()
Select * from cliente ORDER BY ape_cli;
and //
call apellidosclientes()
Visualizar los datos de los incidentes que han tenido un (1) herido, este reporte
debe visualizar la placa del automotor, con los respectivos datos de la pliza como
son fecha de inicio, valor, estado y valor asegurado.
delimiter //
CREATE PROCEDURE incidentesunherido(uno int)
SELECT incidentes.inciplaca,
incidentes.incicantheridos,aseguramientos.asefechainicio,
aseguramientos.asecosto,aseguramientos.aseestado, aseguramientos.asevalorasegurado
FROM incidentes, aseguramientos WHERE incicantheridos=uno;
end //
call incidentesunherido('1')
Visualizar los incidentes del vehculo con placas " FLL420", este reporte debe
visualizar la fecha, el lugar, la cantidad de heridos del incidente, la fecha de
inicio la de expiracin de la pliza y el valor asegurado.
delimiter //
CREATE PROCEDURE incidentesFLL420(fll varchar (6))
SELECT incidentes. incifecha, incidentes. incilugar, incidentes. incicantheridos,
aseguramientos. asefechainicio, aseguramientos. asefechaexpiracion, aseguramientos.
asevalorasegurado
FROM incidentes,aseguramientos WHERE inciplaca=fll;
end //
call incidentesFLL420('FLL420')
4.Realice las Siguientes funciones en MySQL:
Cuente el nmero de estudiantes cuya edad sea mayor a 22.
delimiter //
CREATE FUNCTION `contarestudiantes`(`input` INT) RETURNS INT(11)
BEGIN
DECLARE cantidad int;
SELECT COUNT(*) INTOcantidad
FROM estudiante WHERE edad_est>'22';
RETURN cantidad;
END//
SELECT `contarestudiantes`(@p0) AS `contarestudiantes`
Muestre el nombre y la edad del estudiante ms joven.
delimiter //
CREATE FUNCTION `estudiantejoven`(`input` INT) RETURNS INT(11)
NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER BEGIN DECLARE joven int;
Select MIN(edad_est) INTO joven from estudiante;
RETURN joven;
END //
SELECT `estudiantejoven`(@p0) AS `estudiantejoven`;
Calcule el valor promedio de los cursos cuyas horas sean mayores a 40.
delimiter //
CREATE FUNCTION `valorpromedio`(`input` INT) RETURNS INT(11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN DECLARE promedio int;
SELECT AVG(valor_cur) INTO promedio
FROM curso WHERE horas_cur>='40';
RETURN promedio;
END//
SELECT `valorpromedio`(@p0) AS `valorpromedio`;
Obtener el sueldo promedio de los profesores de la categora 1.
delimiter //
CREATE FUNCTION `sueldopromedio`(`input` INT) RETURNS INT(11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN DECLARE promedio int;
SELECT AVG(sal_prof) INTO promedio
FROM profesor WHERE cate_prof='1';
RETURN promedio;
END//
SELECT `sueldopromedio`(@p0) AS `sueldopromedio`;
Muestre el nombre del profesor con menor sueldo.
delimiter //
CREATE FUNCTION `menorsueldo`(`inout` INT) RETURNS VARCHAR(30) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN DECLARE nombre varchar(30);
SELECT nom_prof INTO nombre
FROM profesor
where sal_prof=(select min(sal_prof)
from profesor); RETURN nombre;
END//
SELECT `menorsueldo`(@p0) AS `menorsueldo`;
5.Realice las Siguientes funciones en ORACLE:
Visualizar el nombre del cliente, la fecha y el valor del pedido ms costoso.
delimiter //
CREATE FUNCTION `pedidomascostoso`(`input` INT) RETURNS INT (11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN DECLARE valor int;
SELECT MAX(val_ped) INTO valor
FROM pedido;
RETURN valor;
END//
SELECT `pedidomascostoso`(@p0) AS `pedidomascostoso`;
Mostrar cuantos artculos se tienen de cada editorial.
delimiter //
create FUNCTION `contareditoriales`(`input` INT) RETURNS INT (11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN
DECLARE valor numeric;
SELECT COUNT(edi_art) INTO valor FROM articulo;
RETURN valor;
END //
SELECT `contareditoriales`(@p0) AS `contareditoriales`;
Visualizar todos los datos de la pliza ms costosa.
delimiter //
CREATE FUNCTION `polizacostosa`(`input` INT) RETURNS INT (11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN DECLARE valor int;
SELECT asecodigo INTO valor
FROM aseguramientos WHERE asevalorasegurado=(select max(asevalorasegurado) from
aseguramientos );
RETURN valor;
END//
SELECT `polizacostosa`(@p0) AS `polizacostosa`;
Visualizar los incidentes con el mnimo nmero de autos involucrados, de este
incidente visualizar el estado de la pliza y el valor asegurado.
delimiter //
create FUNCTION `menosautos`(`input` INT) RETURNS INT (11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN declare valor numeric;
SELECT incicodigo
INTO valor
FROM incidentes
WHERE incicanautosinvolucrados = (select min (incicanautosinvolucrados)
from incidentes);
RETURN valor;
END//
SELECT `menosautos`(@p0) AS `menosautos`;
Visualizar los datos de la pliza cuyo valor asegurado es el ms costoso, este
reporte adems de visualizar todos los datos de la pliza, debe presentar todos los
datos del vehculo que tiene dicha pliza.
delimiter//
create FUNCTION `polizacostosa `(`input` INT) RETURNS INT (11) NOT DETERMINISTIC
CONTAINS SQL SQL SECURITY DEFINER
BEGIN declare valor numeric;
SELECT asecodigo
INTO valor
FROM aseguramientos
WHERE asevalorasegurado=(select max(asevalorasegurado) from aseguramientos );
RETURN valor;
END //
SELECT `polizacostosa `(@p0) AS `polizacostosa `;
6.Construya los siguientes disparadores para controlar la actualizacin y borrado
de registros
En MySQL; para las tablas Profesor, Curso, Estudiante.
Actualizacin:
CREATE TRIGGER `profesorupdate`
BEFORE UPDATE ON `profesor`
FOR EACH ROW INSERT INTO trigger_profesores (DocumentoAnterior,
NombreAnterior,ApellidoAnterior, CategoriaAnterior, SalarioAnterior,
DocumentoNuevo, NombreNuevo, ApellidoNuevo, CategoriaNuevo, SalarioNuevo)
VALUES (OLD.doc_prof, OLD.nom_prof, OLD.ape_prof,OLD.cate_prof, OLD.sal_prof,
NEW.doc_prof, NEW.nom_prof, NEW.ape_prof, NEW.cate_prof, NEW.sal_prof);

CREATE TRIGGER `cursoupdate`


BEFORE UPDATE ON `curso`
FOR EACH ROW INSERT INTO trigger_cursos(CodigoAnterior, NombreAnterior,
HorasAnterior, ValorAnterior, CodigooNuevo, NombreNuevo,HorasNuevo, ValorNuevo)
VALUES (OLD.cod_curs, OLD.nom_curs, OLD.horas_cur, OLD.valor_cur, NEW.cod_curs,
NEW.nom_curs, NEW.horas_cur,NEW.valor_cur);

CREATE TRIGGER `estudianteupdate`


BEFORE UPDATE ON `estudiante`
FOR EACH ROW INSERT INTO trigger_estudiante (DocumentoAnterior, NombreAnterior,
ApellidoAnterior, EdadAnterior,DocumentoNuevo, NombreNuevo, ApellidoNuevo,
EdadNuevo)
VALUES (OLD.doc_est, OLD.nom_est, OLD.ape_est, OLD.edad_est, NEW.doc_est,
NEW.nom_est, NEW.ape_est, NEW.edad_est);
Borrado
CREATE TRIGGER `profesordelete`
AFTER DELETE ON `profesor`
FOR EACH ROW INSERT INTO trigger_profesores (DocumentoAnterior, NombreAnterior,
ApellidoAnterior, CategoriaAnterior,SalarioAnterior, DocumentoNuevo, NombreNuevo,
ApellidoNuevo, CategoriaNuevo, SalarioNuevo) VALUES (OLD.doc_prof, OLD.nom_prof,
OLD.ape_prof, OLD.cate_prof, OLD.sal_prof);
CREATE TRIGGER `cursodelete` AFTER DELETE ON `curso` FOR EACH ROW INSERT INTO
trigger_cursos(CodigoAnterior, NombreAnterior, HorasAnterior, ValorAnterior,
CodigooNuevo,NombreNuevo,HorasNuevo, ValorNuevo)
VALUES (OLD.cod_curs, OLD.nom_curs, OLD.horas_cur, OLD.valor_cur);
CREATE TRIGGER `estudiantedelete`
AFTER DELETE ON `estudiante`
FOR EACH ROW INSERT INTO trigger_estudiante (DocumentoAnterior,NombreAnterior,
ApellidoAnterior, EdadAnterior, DocumentoNuevo, NombreNuevo, ApellidoNuevo,
EdadNuevo)
VALUES (OLD.doc_est, OLD.nom_est, OLD.ape_est, OLD.edad_est)
En ORACLE; para las tablas Cliente, Articulo, Pedido.

En el Motor de su preferencia (ORACLE O MySQL), para las tablas, Automotores,


Aseguramientos, Incidentes.
CREATE TRIGGER `automotoresupdate` BEFORE UPDATE ON `automotores`
FOR EACH ROW INSERT INTO trigger_automotores (PlacaAnterior, MarcaAnterior,
TipoAnterior, ModeloAnterior,NumeroPasajerosAnterior, CilindrajeAnterior,
NumeroChasisAnterior, PlacaNuevo, MarcaNuevo, TipoNuevo, ModeloNuevo,
NumeroPasajerosNuevo, CilindrajeNuevo, NumeroChasisNuevo)
VALUES (OLD.autoplaca, OLD.automarca, OLD.autotipo, OLD.automodelo,
OLD.autonumpasajeros, OLD.autocilindraje, OLD.autonumchasis, NEW.autoplaca,
NEW.automarca, NEW.autotipo,NEW.automodelo, NEW.autonumpasajeros,
NEW.autocilindraje, NEW.autonumchasis)

CREATE TRIGGER `aseguramientosupdate`


EFORE UPDATE ON `aseguramientos` FOR EACH ROW INSERT INTO
trigger_aseguramientos(CodigoAnterior, FechaInicioAnterior,FechaExpiracionAnterior,
ValorAseguradoAnterior, EstadoAnterior, CostoAnterior, PlacaAnterior, CodigoNuevo,
FechaInicioNuevo, FechaExpiracionNuevo, ValorAseguradoNuevo,EstadoNuevo,
CostoNuevo, PlacaNuevo)
VALUES (OLD.asecodigo, OLD.asefechainicio, OLD.asefechaexpiracion,
OLD.asevalorasegurado, OLD.aseestado, OLD.asecosto, OLD.aseplaca,NEW.asecodigo,
NEW.asefechainicio, NEW.asefechaexpiracion, NEW.asevalorasegurado, NEW.aseestado,
NEW.asecosto, NEW.aseplaca)

CREATE TRIGGER `incidentesupdate`


BEFORE UPDATE ON `incidentes` FOR EACH ROW
INSERT INTO trigger_incidentes(CodigoAnterior, FechaAnterior, PlacaAnterior,
LugarAnterior,CantidadHeridosAnterior, CantidadFatalidadesAnterior,
CantidadAutosInvolucradosAnterior, CodigoNuevo, FechaNuevo, PlacaNuevo, LugarNuevo,
CantidadHeridosNuevo,CantidadFatalidadesNuevo, CantidadAutosInvolucradosNuevo)
VALUES (OLD.incicodigo, OLD.incifecha, OLD.inciplaca, OLD.incilugar,
OLD.incicantheridos, OLD.incicanfatalidades,OLD.incicanautosinvolucrados,
NEW.incicodigo, NEW.incifecha, NEW.inciplaca, NEW.incilugar, NEW.incicantheridos,
NEW.incicanfatalidades, NEW.incicanautosinvolucrados)

Das könnte Ihnen auch gefallen