You are on page 1of 11

USAR LENGUAJE TRANSACCIONAL SOBRE LA BASE

DE DATOS

Presentado por:
Fabian Danilo Leon

Presentado a:
Camilo Andrs Garay Guevara

Sena
2017
USAR LENGUAJE TRANSACCIONAL SOBRE LA BASE
DE DATOS
1. Construya los siguientes procedimientos Almacenados para insercin de
registros:
En MySQL; para las tablas Profesor, Curso, Estudiante, Estudiantexcurso.

Create procedure colegio() Select * from profesor, curso, estudiante, estudiantexcurso;

call colegio();

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

Create or replace PROCEDURE negocios(unos out SYS_REFCURSOR)

as

BEGIN

OPEN unos FOR

SELECT *

FROM cliente, articulo, pedido;

END negocios;

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


Automotores, Aseguramientos, Incidentes.

Create procedure seguros() Select * from compaia, tiposautomotores, automotores, aseguramie


ntos, incidentes;

call seguros();

2. En Oracle construya los procedimientos almacenados para realizar los siguientes procesos:

Muestre los salarios de los profesores ordenados por categora.

create or replace PROCEDURE salarioprofesor(uno out SYS_REFCURSOR)

as

BEGIN

OPEN uno FOR

SELECT sal_prof

FROM profesor ORDER BY cate_prof;

END salarioprofesor;

Muestre los cursos cuyo valor sea mayor a $500.000.


Create or replace PROCEDURE valorcurso(uno out SYS_REFCURSOR)

as

BEGIN

OPEN uno FOR

SELECT nom_curs

FROM curso WHERE valor_cur>='500000';

END valorcurso;

Visualizar el nombre, apellido y direccin de todos aquellos clientes que hayan realizado un
pedido el da 25 /02/2012.

Create or replace PROCEDURE pedidos02252012(uno out SYS_REFCURSOR)

as

BEGIN

OPEN uno FOR

SELECT cliente.nom_cli, cliente.ape_cli, cliente.dir_cli

FROM cliente, pedido WHERE pedido.fec_ped='02/25/2012';

END pedidos02252012;

Listar todos los pedidos realizados incluyendo el nombre del artculo.

Create or replace PROCEDURE todospedidos(uno out SYS_REFCURSOR)

as

BEGIN

OPEN uno FOR

SELECT pedido.id_ped, pedido.id_cli_ped, pedido.fec_ped, pedido.val_ped, articulo.tit_art

FROM pedido, articulo;

END 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.

Create or replace PROCEDURE polizaoctubre(uno out SYS_REFCURSOR)

as

BEGIN
OPEN uno FOR

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 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.

CREATE PROCEDURE `cursoascendente`() NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFIN
ER Select * from curso ORDER BY valor_cur ASC;

call cursoascendente();

Mostrar los pedidos con los respectivos artculos (cdigo, nombre, valor y cantidad pedida).

Create procedure pedidosyarticulos() Select pedido.id_ped,pedido.id_cli_ped, pedido.fec_ped, pe


dido.val_ped,articulo.id_art, articulo.tit_art, articulo.prec_art,articuloxpedido.can_art_artped fro
m pedido, articulo,articuloxpedido

call pedidosyarticulos()

Visualizar los datos de las empresas fundadas entre el ao 1991 y 1998.

CREATE PROCEDURE empresafundada() SELECT * FROM compaia WHERE comaofun>=1991 AND


comaofun<=1998

call empresafundada()

Visualizar todos los clientes organizados por apellido.

Create procedure apellidosclientes() Select * from cliente ORDER BY ape_cli

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.

CREATE PROCEDURE incidentesunherido(uno int) SELECTincidentes.inciplaca, incidentes.incicanthe


ridos,aseguramientos.asefechainicio, aseguramientos.asecosto,aseguramientos.aseestado, asegur
amientos.asevaloraseguradoFROM incidentes, aseguramientos WHERE incicantheridos=uno
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.

CREATE PROCEDURE incidentesFLL420(fll varchar(6)) SELECTincidentes.incifecha,incidentes.incilug


ar,incidentes.incicantheridos,aseguramientos.asefechainicio,aseguramientos.asefechaexpiracion,a
seguramientos.asevaloraseguradoFROM incidentes,aseguramientos WHERE inciplaca=fll

call incidentesFLL420('FLL420')

4. Realice las Siguientes funciones en MySQL:

Cuente el nmero de estudiantes cuya edad sea mayor a 22.

CREATE FUNCTION `contarestudiantes`(`input` INT) RETURNS INT(11) NOT DETERMINISTIC CONTAI


NS SQL SQL SECURITY DEFINER BEGIN DECLARE cantidad int; SELECT COUNT(*) INTOcantidad FRO
M estudiante WHERE edad_est>'22'; RETURN cantidad; END

SELECT `contarestudiantes`(@p0) AS `contarestudiantes`

Muestre el nombre y la edad del estudiante ms joven.

CREATE FUNCTION `estudiantejoven`(`input` INT) RETURNS INT(11) NOT DETERMINISTIC CONTAIN


S SQL SQL SECURITY DEFINER BEGIN DECLARE joven int; SelectMIN(edad_est) INTO joven from est
udiante; RETURN joven; END

SELECT `estudiantejoven`(@p0) AS `estudiantejoven`;

Calcule el valor promedio de los cursos cuyas horas sean mayores a 40.

CREATE FUNCTION `valorpromedio`(`input` INT) RETURNS INT(11) NOT DETERMINISTIC CONTAINS


SQL SQL SECURITY DEFINER BEGIN DECLARE promedio int; SELECT AVG(valor_cur) INTO promedioF
ROM curso WHERE horas_cur>='40'; RETURN promedio; END

SELECT `valorpromedio`(@p0) AS `valorpromedio`;

Obtener el sueldo promedio de los profesores de la categora 1.

CREATE FUNCTION `sueldopromedio`(`input` INT) RETURNS INT(11) NOT DETERMINISTIC CONTAIN


S 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.

CREATE FUNCTION `menorsueldo`(`inout` INT) RETURNS VARCHAR(30) NOT DETERMINISTIC CONT


AINS SQL SQL SECURITY DEFINER BEGIN DECLARE nombre varchar(30);SELECT nom_prof INTO nom
bre 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.

create or replace FUNCTION pedidomascostos RETURN NUMBER IS valor NUMBER;

BEGIN

SELECT MAX(val_ped) INTO valor FROM pedido;

RETURN valor;

END;

Mostrar cuantos artculos se tienen de cada editorial.

create or replace FUNCTION contareditoriales RETURN NUMBER IS valor NUMBER;

BEGIN

SELECT COUNT(edi_art) INTO valor FROM articulo;

RETURN valor;

END;

Visualizar todos los datos de la pliza ms costosa.

create or replace FUNCTION polizacostosa RETURN NUMBER IS valor NUMBER;

BEGIN

SELECT asecodigo INTO valor FROM aseguramientos WHERE asecosto=(select min(asecosto) from
aseguramientos );

RETURN valor;

END;

Visualizar los incidentes con el mnimo nmero de autos involucrados, de este incidente
visualizar el estado de la pliza y el valor asegurado.

create or replace FUNCTION menosautos RETURN NUMBER IS valor NUMBER;

BEGIN

SELECT incicodigo INTO valor FROM incidentes WHERE incicanautosinvolucrados=(select


min(incicanautosinvolucrados) from incidentes);

RETURN valor;

END;
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.

create or replace FUNCTION polizacostosa RETURN NUMBER IS valor NUMBER;

BEGIN

SELECT asecodigo INTO valor FROM aseguramientos WHERE asevalorasegurado=(select


max(asevalorasegurado) from aseguramientos );

RETURN valor;

END;

6. Construya los siguiente disparadores para controlar la actualizacin y borrado de registros

En MySQL; para las tablas Profesor, Curso, Estudiante.

Actualizacin:

Profesor

CREATE TRIGGER `profesorupdate` BEFORE UPDATE ON `profesor` FOR EACH ROW INSERT INTO tri
gger_profesores (DocumentoAnterior, NombreAnterior,ApellidoAnterior, CategoriaAnterior, Salari
oAnterior, DocumentoNuevo, NombreNuevo, ApellidoNuevo, CategoriaNuevo, SalarioNuevo) VAL
UES (OLD.doc_prof, OLD.nom_prof, OLD.ape_prof,OLD.cate_prof, OLD.sal_prof, NEW.doc_prof, N
EW.nom_prof, NEW.ape_prof, NEW.cate_prof, NEW.sal_prof);

Curso

CREATE TRIGGER `cursoupdate` BEFORE UPDATE ON `curso` FOR EACH ROW INSERT INTO trigger_
cursos(CodigoAnterior, NombreAnterior, HorasAnterior, ValorAnterior, CodigooNuevo, NombreNu
evo,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);

Estudiante

CREATE TRIGGER `estudianteupdate` BEFORE UPDATE ON `estudiante` FOR EACH ROW INSERT INT
O trigger_estudiante (DocumentoAnterior, NombreAnterior, ApellidoAnterior, EdadAnterior,Docu
mentoNuevo, NombreNuevo, ApellidoNuevo, EdadNuevo) VALUES (OLD.doc_est, OLD.nom_est, O
LD.ape_est, OLD.edad_est, NEW.doc_est, NEW.nom_est, NEW.ape_est, NEW.edad_est);

Borrado

Profesor

CREATE TRIGGER `profesordelete` AFTER DELETE ON `profesor` FOR EACH ROW INSERT INTO trigg
er_profesores (DocumentoAnterior, NombreAnterior, ApellidoAnterior, CategoriaAnterior,SalarioA
nterior, DocumentoNuevo, NombreNuevo, ApellidoNuevo, CategoriaNuevo, SalarioNuevo) VALUE
S (OLD.doc_prof, OLD.nom_prof, OLD.ape_prof, OLD.cate_prof, OLD.sal_prof);

Curso

CREATE TRIGGER `cursodelete` AFTER DELETE ON `curso` FOR EACH ROW INSERT INTO trigger_cur
sos(CodigoAnterior, NombreAnterior, HorasAnterior, ValorAnterior, CodigooNuevo,NombreNuevo
,HorasNuevo, ValorNuevo) VALUES (OLD.cod_curs, OLD.nom_curs, OLD.horas_cur, OLD.valor_cur);

Estudiante

CREATE TRIGGER `estudiantedelete` AFTER DELETE ON `estudiante` FOR EACH ROW INSERT INTO t
rigger_estudiante (DocumentoAnterior,NombreAnterior, ApellidoAnterior, EdadAnterior, Docume
ntoNuevo, NombreNuevo, ApellidoNuevo, EdadNuevo) VALUES (OLD.doc_est, OLD.nom_est, OLD.
ape_est, OLD.edad_est)

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

Actualizacin:
Cliente
create or replace trigger "CLIENTEUPDATE"
BEFORE
update on "CLIENTE"
for each row
begin
INSERT INTO trigger_cliente (CodigoAnterior, NombreAnterior, ApellidoAnterior,
DireccionAnterior,DepartamentoAnterior, MesCumpleAnterior, CodigoNuevo,
NombreNuevo, ApellidoNuevo, DireccionNuevo, DepartamentoNuevo,
MesCumpleNuevo) VALUES (:OLD.id_cli, :OLD.nom_cli, :OLD.ape_cli,
:OLD.dir_cli, :OLD.dep_cli, :OLD.mes_cum_cli, :NEW.id_cli,
:NEW.nom_cli, :NEW.ape_cli, :NEW.dir_cli, :NEW.dep_cli, :NEW.mes_cum_cli);
end;
Articulo
create or replace trigger "ARTICULOUPDATE"
BEFORE
update on "ARTICULO"
for each row
begin
INSERT INTO trigger_articulo (CodigoAnterior, NombreAnterior, AutorAnterior,
EditorialAnterior, PrecioAnterior, CodigoNuevo, NombreNuevo, AutorNuevo,
EditorialNuevo, PrecioNuevo) VALUES (:OLD.id_art, :OLD.tit_art, :OLD.aut_art,
:OLD.edi_art, :OLD.prec_art, :NEW.id_art, :NEW.tit_art, :NEW.aut_art,
:NEW.edi_art, :NEW.prec_art);
end;
Pedido
create or replace trigger "PEDIDOUPDATE"
BEFORE
update on "PEDIDO"
for each row
begin
INSERT INTO trigger_pedido (CodigoAnterior, DocumentoClienteAnterior,
FechaAnterior, ValorAnterior, CodigoNuevo, DocumentoClienteNuevo,
FechaNuevo, ValorNuevo) VALUES (:OLD.id_ped, :OLD.id_cli_ped, :OLD.fec_ped,
:OLD.val_ped, :NEW.id_ped, :NEW.id_cli_ped, :NEW.fec_ped, :NEW.val_ped);
end;
Borrado
Cliente
create or replace trigger "CLIENTEDELETE"
AFTER
delete on "CLIENTE"
for each row
begin
INSERT INTO trigger_cliente (CodigoAnterior, NombreAnterior, ApellidoAnterior,
DireccionAnterior,DepartamentoAnterior, MesCumpleAnterior, CodigoNuevo,
NombreNuevo, ApellidoNuevo, DireccionNuevo, DepartamentoNuevo,
MesCumpleNuevo) VALUES (:OLD.id_cli, :OLD.nom_cli, :OLD.ape_cli,
:OLD.dir_cli, :OLD.dep_cli, :OLD.mes_cum_cli);
end;
Articulo
create or replace trigger "ARTICULODELETE"
AFTER
delete on "ARTICULO"
for each row
begin
INSERT INTO trigger_articulo (CodigoAnterior, NombreAnterior, AutorAnterior,
EditorialAnterior, PrecioAnterior, CodigoNuevo, NombreNuevo, AutorNuevo,
EditorialNuevo, PrecioNuevo) VALUES (:OLD.id_art, :OLD.tit_art, :OLD.aut_art,
:OLD.edi_art, :OLD.prec_art);
end;
Pedido
create or replace trigger "PEDIDODELETE"
AFTER
delete on "PEDIDO"
for each row
begin
INSERT INTO trigger_pedido (CodigoAnterior, DocumentoClienteAnterior,
FechaAnterior, ValorAnterior, CodigoNuevo, DocumentoClienteNuevo,
FechaNuevo, ValorNuevo) VALUES (:OLD.id_ped, :OLD.id_cli_ped, :OLD.fec_ped,
:OLD.val_ped);
end;
En el Motor de su preferencia (ORACLE O MySQL), para las tablas, Automotores,
Aseguramientos, Incidentes.
Actualizacin:
Automotores
CREATE TRIGGER `automotoresupdate` BEFORE UPDATE ON `automotores` FOR EACH ROW INSER
T INTO trigger_automotores (PlacaAnterior, MarcaAnterior, TipoAnterior, ModeloAnterior,Numer
oPasajerosAnterior, CilindrajeAnterior, NumeroChasisAnterior, PlacaNuevo, MarcaNuevo, TipoNue
vo, ModeloNuevo, NumeroPasajerosNuevo, CilindrajeNuevo, NumeroChasisNuevo)VALUES (OLD.a
utoplaca, OLD.automarca, OLD.autotipo, OLD.automodelo, OLD.autonumpasajeros, OLD.autocilind
raje, OLD.autonumchasis, NEW.autoplaca, NEW.automarca, NEW.autotipo,NEW.automodelo, NE
W.autonumpasajeros, NEW.autocilindraje, NEW.autonumchasis)

Aseguramientos

CREATE TRIGGER `aseguramientosupdate` BEFORE UPDATE ON `aseguramientos` FOR EACH ROW I


NSERT INTO trigger_aseguramientos(CodigoAnterior, FechaInicioAnterior,FechaExpiracionAnterior
, ValorAseguradoAnterior, EstadoAnterior, CostoAnterior, PlacaAnterior, CodigoNuevo, FechaInicio
Nuevo, FechaExpiracionNuevo, ValorAseguradoNuevo,EstadoNuevo, CostoNuevo, PlacaNuevo) VA
LUES (OLD.asecodigo, OLD.asefechainicio, OLD.asefechaexpiracion, OLD.asevalorasegurado, OLD.a
seestado, OLD.asecosto, OLD.aseplaca,NEW.asecodigo, NEW.asefechainicio, NEW.asefechaexpirac
ion, NEW.asevalorasegurado, NEW.aseestado, NEW.asecosto, NEW.aseplaca)

Incidentes

CREATE TRIGGER `incidentesupdate` BEFORE UPDATE ON `incidentes` FOR EACH ROW INSERT INT
O trigger_incidentes(CodigoAnterior, FechaAnterior, PlacaAnterior, LugarAnterior,CantidadHeridos
Anterior, CantidadFatalidadesAnterior, CantidadAutosInvolucradosAnterior, CodigoNuevo, FechaN
uevo, PlacaNuevo, LugarNuevo, CantidadHeridosNuevo,CantidadFatalidadesNuevo, CantidadAutos
InvolucradosNuevo) VALUES (OLD.incicodigo, OLD.incifecha, OLD.inciplaca, OLD.incilugar, OLD.inci
cantheridos, OLD.incicanfatalidades,OLD.incicanautosinvolucrados, NEW.incicodigo, NEW.incifech
a, NEW.inciplaca, NEW.incilugar, NEW.incicantheridos, NEW.incicanfatalidades, NEW.incicanautosi
nvolucrados)

Borrado

Automotores

CREATE TRIGGER `automotoresdelete` AFTER DELETE ON `automotores` FOR EACH ROW INSERT IN
TO trigger_automotores (PlacaAnterior, MarcaAnterior, TipoAnterior, ModeloAnterior,NumeroPas
ajerosAnterior, CilindrajeAnterior, NumeroChasisAnterior, PlacaNuevo, MarcaNuevo, TipoNuevo,
ModeloNuevo, NumeroPasajerosNuevo, CilindrajeNuevo, NumeroChasisNuevo)VALUES (OLD.auto
placa, OLD.automarca, OLD.autotipo, OLD.automodelo, OLD.autonumpasajeros, OLD.autocilindraj
e, OLD.autonumchasis)

Aseguramientos

CREATE TRIGGER `aseguramientosdelete` AFTER DELETE ON `aseguramientos` FOR EACH ROW INS
ERT INTO trigger_aseguramientos(CodigoAnterior, FechaInicioAnterior,FechaExpiracionAnterior, V
alorAseguradoAnterior, EstadoAnterior, CostoAnterior, PlacaAnterior, CodigoNuevo, FechaInicioN
uevo, FechaExpiracionNuevo, ValorAseguradoNuevo,EstadoNuevo, CostoNuevo, PlacaNuevo) VAL
UES (OLD.asecodigo, OLD.asefechainicio, OLD.asefechaexpiracion, OLD.asevalorasegurado, OLD.as
eestado, OLD.asecosto, OLD.aseplaca)

Incidentes

CREATE TRIGGER `incidentesdelete` AFTER DELETE ON `incidentes` FOR EACH ROW INSERT INTO tr
igger_incidentes(CodigoAnterior, FechaAnterior, PlacaAnterior, LugarAnterior,CantidadHeridosAnt
erior, CantidadFatalidadesAnterior, CantidadAutosInvolucradosAnterior, CodigoNuevo, FechaNuev
o, PlacaNuevo, LugarNuevo, CantidadHeridosNuevo,CantidadFatalidadesNuevo, CantidadAutosInv
olucradosNuevo) VALUES (OLD.incicodigo, OLD.incifecha, OLD.inciplaca, OLD.incilugar, OLD.incican
theridos, OLD.incicanfatalidades,OLD.incicanautosinvolucrados)

You might also like