Está en la página 1de 13

1.

Construir los siguientes procedimientos almacenados para inserción


de registros:
• En MySQL; para las tablas Profesor, Curso, Estudiante, Estudiantexcurso.
• En ORACLE; para las tablas Cliente, Articulo, Pedido.
• En SQL SERVER; para las tablas Compañía, TipoAutomotores, Automotores,
Aseguramientos, Incidentes.

Profesor
create procedure regprofesor2(doc_prof varchar(11), nom_prof varchar(30), ape_prof
varchar(30), cate_prof int(11), sal_prof int(11))
insert into profesores
(doc_prof,nom_prof,ape_prof,cate_prof,sal_prof)
values(doc_prof,nom_prof,ape_prof,cate_prof,sal_prof);

call regprofesor2('9100400','Paula','Herrera',2,1500000)

Cursos
create procedure regcursos(nom_curs varchar(100), horas_cur int(11), valor_cur
int(11))
insert into cursos
(nom_curs,horas_cur,valor_cur)
values(nom_curs,horas_cur,valor_cur);

Estudiante
create procedure regestudiantes(doc_est varchar(11),nom_est varchar(30),ape_est
varchar(30),edad_est int(11))
insert into estudiantes
(doc_est,nom_est,ape_est,edad_est)
values(doc_est,nom_est,ape_est,edad_est);

Estudiantexcurso
create procedure regestxcurso(cod_cur_estcur int(11),doc_est_estcur
int(30),fec_ini_estcur date)
insert into estudiantexcurso
(cod_cur_estcur,doc_est_estcur,fec_ini_estcur)
values(cod_cur_estcur,doc_est_estcur,fec_ini_estcur);

+---+---+---+---+---+---+

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

create or replace NONEDITIONABLE PROCEDURE ingresarcliente


(
id_cli IN VARCHAR2
, nom_cli IN VARCHAR2
, ape_cli IN VARCHAR2
, dir_cli IN VARCHAR2
, dep_cli IN VARCHAR2
, mes_cum_cli IN VARCHAR2
) AS
BEGIN
insert INTO clientes(id_cli,nom_cli,ape_cli,dir_cli,dep_cli,mes_cum_cli)
VALUES(id_cli,nom_cli,ape_cli,dir_cli,dep_cli,mes_cum_cli);
END ingresarcliente;

create or replace NONEDITIONABLE PROCEDURE ingresararticulos


(
id_art IN INT
, tit_art IN VARCHAR2
, aut_art IN VARCHAR2
, edi_art IN VARCHAR2
, prec_art IN VARCHAR2
) AS
BEGIN
insert INTO articulos(id_art,tit_art,aut_art,edi_art,prec_art)
VALUES(id_art,tit_art,aut_art,edi_art,prec_art);
END ingresararticulos;

___________________________________________________________________________________
__
• En SQL SERVER; para las tablas Compañía, TipoAutomotores, Automotores,
Aseguramientos, Incidentes.

CREATE PROCEDURE ingresarcompanias


@comnit varchar(11),
@comnombre varchar(30),
@comanofun int,
@comreplegal varchar(100)

AS

SET NOCOUNT ON;


INSERT INTO companias
(comnit, comnombre, comanofun, comreplegal)
VALUES(@comnit,@comnombre,@comanofun,@comreplegal)

GO

CREATE PROCEDURE ingresarautomotores


@autoplaca varchar(6),
@automarca varchar(30),
@autotipo int,
@automodelo int,
@autopasajeros int,
@autocilindraje int,
@autonumchasis varchar(20)

AS
SET NOCOUNT ON;
INSERT INTO automotores
(autoplaca, automarca, autotipo,
automodelo,autopasajeros,autocilindraje,autonumchasis)
VALUES(@autoplaca,@automarca,@autotipo,@automodelo,
@autopasajeros,@autocilindraje,@autonumchasis)
GO

CREATE PROCEDURE ingresarTipoAutomotores

@nom varchar(30)
AS
SET NOCOUNT ON;
INSERT INTO tiposautomotores
(nom)
VALUES (@nom)
GO

CREATE PROCEDURE ingresaraseguramientos


@asecodigo int,
@asefechainicio date,
@asefechaexpiracion date,
@asevalorasegurado int,
@aseestado varchar(30),
@asecosto int,
@aseplaca varchar(6)

AS
SET NOCOUNT ON;
INSERT INTO aseguramientos
(asecodigo, asefechainicio, asefechaexpiracion,
asevalorasegurado,aseestado,asecosto,aseplaca)
VALUES(@asecodigo,@asefechainicio,@asefechaexpiracion,@asevalorasegurado,
@aseestado,@asecosto,@aseplaca)
GO

CREATE PROCEDURE ingresarincidentes


@incicodigo int,
@incifecha date,
@inciplaca varchar(6),
@incilugar varchar(40),
@inciantheridos int,
@incicanfatalidades int,
@incicanautosinvolucrados int

AS
SET NOCOUNT ON;
INSERT INTO incidentes
(incicodigo, incifecha, inciplaca,
incilugar,inciantheridos,incicanfatalidades,incicanautosinvolucrados)
VALUES(@incicodigo, @incifecha, @inciplaca,
@incilugar ,@inciantheridos ,@incicanfatalidades,@incicanautosinvolucrados)
GO

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

2. En Oracle, construir los procedimientos almacenados para realizar los


siguientes procesos:

• Visualizar el nombre, apellido y dirección de todos aquellos clientes que hayan


realizado un pedido el día 25/02/2012.
• Listar todos los pedidos realizados incluyendo el nombre del artículo.
• Mostrar los pedidos con los respectivos artículos (código, nombre, valor y
cantidad
pedida).
• Visualizar los datos de las empresas fundadas entre el año 1991 y 1998.
• Visualizar todos los clientes organizados por apellido.

CREATE PROCEDURE CLI25022012(CLIE IN VARCHAR, NOM_CLI OUT SYS_REFCURSOR)


AS
BEGIN
OPEN NOM_CLI FOR
SELECT NOM_CLI, APE_CLI, DIR_CLI FROM CLIENTES,PEDIDOS
WHERE
clientes.id_cli=pedidos.id_cli_ped
AND pedidos.fec_ped = '25/02/2012';
END CLI25022012;

create or replace NONEDITIONABLE PROCEDURE PED_ART(PED IN VARCHAR, PEDIDO OUT


SYS_REFCURSOR)
AS
BEGIN
OPEN PEDIDO FOR
select id_ped Pedido, tit_art Nombre
from pedidos,articuloxpedido,articulos
where
articuloxpedido.id_art_artped = articulos.id_art
and articuloxpedido.id_ped_artped = pedidos.id_ped
;
END PED_ART;

create or replace NONEDITIONABLE PROCEDURE PED_COMP(PED IN VARCHAR, PEDIDO OUT


SYS_REFCURSOR)
AS
BEGIN
OPEN PEDIDO FOR
select id_art Código,tit_art Descripción,val_ven_art_artped Valor,can_art_artped
Cantidad
from articulos,articuloxpedido
where
id_art=id_art_artped
order by id_art asc;
END PED_COMP;

create or replace NONEDITIONABLE PROCEDURE FUN19911998(PED IN VARCHAR, FUNDADA OUT


SYS_REFCURSOR)
AS
BEGIN
OPEN FUNDADA FOR
select * from companias
where comanofun>=1991 and comanofun<=1998;
END FUN19911998;

create or replace NONEDITIONABLE PROCEDURE TODOSCLIENTES(PED IN VARCHAR, CLIENTE


OUT SYS_REFCURSOR)
AS
BEGIN
OPEN CLIENTE FOR
select * from clientes
order by ape_cli asc;
END TODOSCLIENTES;

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

3. En MySQL, construir los procedimientos almacenados para realizar


los siguientes procesos:
• Mostrar los salarios de los profesores ordenados por categoría.
• Mostrar los cursos cuyo valor sea mayor a $500.000.
• Mostrar todos los campos de la tabla curso en orden ascendente según el valor.

mysql> CREATE PROCEDURE SAL_PROF_ORDEN()


-> SELECT * FROM PROFESORES
-> ORDER BY CATE_PROF;

mysql> CREATE PROCEDURE CURSOS500()


-> SELECT * FROM CURSOS
-> WHERE VALOR_CUR >=500000;

mysql> CREATE PROCEDURE CURSOSASC()


-> SELECT * FROM CURSOS
-> ORDER BY VALOR_CUR ASC;

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

4. En SQL Server, construir los procedimientos almacenados para realizar


los siguientes procesos:
• Listar todos los datos de los automotores cuya póliza expiró en octubre de 2013,
este reporte debe visualizar la placa, el modelo, la marca, número de pasajeros,
cilindraje nombre de automotor, el valor de la póliza y el valor asegurado.
• 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 póliza como son
fecha de inicio, valor, estado y valor asegurado.
• Visualizar los incidentes del vehículo con placas "FLL420", este reporte debe
visualizar la fecha, el lugar, la cantidad de heridos del incidente, la fecha de
inicio la
de expiración de la póliza y el valor asegurado.

CREATE PROCEDURE expiracionPoliza


-- Add the parameters for the stored procedure here

AS
BEGIN
SELECT * FROM AUTOMOTORES, aseguramientos
WHERE
autoplaca = aseplaca
and asefechaexpiracion >= '2013-01-01';
SET NOCOUNT ON;

-- Insert statements for procedure here

END
GO

CREATE PROCEDURE incidentes1


-- Add the parameters for the stored procedure here

AS
BEGIN
SELECT * FROM AUTOMOTORES, incidentes
WHERE
autoplaca = inciplaca
and inciantheridos = 1;
SET NOCOUNT ON;

-- Insert statements for procedure here

END

CREATE PROCEDURE FLL420


-- Add the parameters for the stored procedure here

AS
BEGIN
Select inciplaca, incifecha, incilugar, inciantheridos, asefechainicio,
asefechaexpiracion, asevalorasegurado
From incidentes, aseguramientos
Where inciplaca=aseplaca
and inciplaca = 'FLL420';
SET NOCOUNT ON;

-- Insert statements for procedure here

END

GO

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

5. Realizar las siguientes funciones en MySQL:


• Contar el número de estudiantes cuya edad sea mayor a 22.
• Mostrar el nombre y la edad del estudiante más joven.
• Calcular el valor promedio de los cursos cuyas horas sean mayores a 40.
• Obtener el sueldo promedio de los profesores de la categoría 1.
• Mostrar el nombre del profesor con menor sueldo.

mysql> delimiter //
mysql> create function contar3() returns int
-> begin
-> declare cantidad int;
-> select count(doc_est) into cantidad from estudiantes
-> where edad_est >22;
-> return cantidad;
-> end
-> //

mysql> delimiter //
mysql> create function estudiantemasjoven() returns varchar(30)
-> begin
-> declare nombre varchar(30);
-> declare edad varchar(9);
-> select nom_est , edad_est into nombre , edad from estudiantes
-> where edad_est = (select min(edad_est) from estudiantes);
-> return concat (nombre , " " , edad);
-> end
-> //

mysql> delimiter //
mysql> create function promediocurso() returns int
-> begin
-> declare promedio decimal (11,2);
-> select avg(valor_cur) into promedio from cursos
-> where horas_cur > 40;
-> return promedio;
-> end
-> //

mysql> delimiter //
mysql> create function sueldopromedioprof() returns int
-> begin
-> declare sueldprom decimal(11,2);
-> select avg(sal_prof) into sueldprom from profesores
-> where cate_prof = 1;
-> return sueldoprom;
-> end
-> //

mysql> delimiter //
mysql> create function profmenorsueldo() returns int
-> begin
-> declare nombre varchar(30);
-> declare sueldo int;
-> select nom_prof , sal_prof into nombre , sueldo from profesores
-> where sal_prof = (select min(sal_prof) from profesores);
-> return concat (nombre " " sueldo);
-> end
-> //

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

6. Realizar las siguientes funciones en ORACLE:


• Visualizar el nombre del cliente, la fecha y el valor del pedido más costoso.
• Mostrar cuantos artículos se tienen de cada editorial.

create or replace FUNCTION pedidomascostos RETURN NUMBER IS nombre varchar(30);


fecha varchar(30) ;valor NUMBER;
BEGIN
select clientes.nom_cli, pedidos.fec_ped, pedidos.val_ped into nombre, fecha,
valor
from clientes, pedidos
where id_cli=id_cli_ped
and
pedidos.val_ped=(
select max(val_ped)from pedidos);
RETURN nombre;
END pedidomascostos;
create or replace FUNCTION NUMEROARTICULOS RETURN NUMBER IS CANTIDAD NUMBER;
BEGIN
select count(id_art) Cantidad INTO CANTIDAD from articulos;
RETURN CANTIDAD;
END NUMEROARTICULOS;

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

7. Realizar las siguientes funciones en SQL Server:

Visualizar todos los datos de la póliza más costosa.


Visualizar los incidentes con el mínimo número de autos involucrados, de este
incidente visualizar el estado
de la póliza y el valor asegurado.
Visualizar los datos de la póliza cuyo valor asegurado es el más costoso, este
reporte además de visualizar
todos los datos de la póliza, debe presentar todos los datos del vehículo que tiene
dicha póliza.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Name
-- Create date:
-- Description:
-- =============================================
alter FUNCTION polizacostosa
(

)
RETURNS TABLE
AS
RETURN
(
select * from aseguramientos
where asecosto= (select max(asecosto) from aseguramientos)
-- Add the SELECT statement with parameter references here

)
GO

select * from polizacostosa()

create function menorincidente() returns table


as
return
select incicodigo, incifecha, inciplaca,incilugar,inciantheridos,
incicanfatalidades,incicanautosinvolucrados, aseestado,asevalorasegurado
from incidentes, aseguramientos
where
inciplaca=aseplaca
and incicanautosinvolucrados = (
select min(incicanautosinvolucrados) from incidentes)
go

create function polizamascostosa() returns table


as
return
Select * from aseguramientos,automotores
Where
aseplaca = autoplaca
and asevalorasegurado in(Select max(asevalorasegurado) from aseguramientos);
go

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
+---+---+

8. Construir los siguientes disparadores para controlar la actualización y borrado


de registros:

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


En ORACLE, para las tablas Cliente, Articulo, Pedido.
En SQL Server, para las tablas Automotores, Aseguramientos, Incidentes.

--Crear tabla auditoria_prof


mysql> create table auditoria_profesores(
-> doc_prof_anterior varchar(11) not null primary key,
-> nom_prof_anterior varchar(30) not null,
-> ape_prof_anterior varchar(30) not null,
-> cate_prof_anterior int(11) not null,
-> sal_prof_anterior int(11) not null
-> )
-> ;
--CREAR TRIGGER
mysql> delimiter $$
mysql> create trigger trg_prof_update
-> before update on profesores
-> for each row
-> begin
-> insert into auditoria_prof(
-> aud_nom_prof_ant,
-> aud_ape_prof_ant,
-> aud_cate_prof_ant,
-> aud_sal_prof_ant,
-> aud_nom_prof_new,
-> aud_ape_prof_new,
-> aud_cate_prof_new,
-> aud_sal_prof_new,
-> aud_doc_prof,
-> aud_usuario,
-> aud_fechamodificacion,
-> aud_accion)
-> values(old.nom_prof , old.ape_prof , old.cate_prof , old.sal_prof ,
-> new.nom_prof , new.ape_prof , new.cate_prof , new.sal_prof , new.doc_prof ,
current_user(), now(),
-> 'Actualización');
-> end;
-> $$
--delete
mysql> delimiter //
mysql> create trigger aud_prof_delete
-> after delete on profesores
-> for each row
-> begin
-> insert into auditoria_prof(
-> aud_nom_prof_ant,
-> aud_ape_prof_ant,
-> aud_cate_prof_ant,
-> aud_sal_prof_ant,
-> aud_doc_prof,
-> aud_usuario,
-> aud_fechamodificacion,
-> aud_accion)
-> values(
-> old.nom_prof , old.ape_prof , old.cate_prof , old.sal_prof , old.doc_prof ,
-> current_user() , now() , 'Borrado');
-> end;
-> //

--Cursos
mysql> create table aud_cursos(
-> id_aud_cursos int not null auto_increment primary key,
-> Ant_nom_curs varchar(100) not null,
-> Ant_horas_cur int(11) not null,
-> Ant_valor_cur int(11) not null,
-> new_nom_curs varchar(100) not null,
-> new_horas_cur int(11) not null,
-> new_valor_cur int(11) not null,
-> cod_curs int(11) not null,
-> usuario_curs varchar(30) not null,
-> fecha_cur datetime not null,
-> accion_cur varchar(30) not null
-> ) auto_increment=1;

mysql> delimiter //
mysql> create trigger trg_cursos_update
-> before update on cursos
-> for each row
-> begin
-> insert into aud_cursos(
-> Ant_nom_curs , Ant_horas_cur, Ant_valor_cur, new_nom_curs, new_horas_cur,
new_valor_cur, cod_curs, usuario_curs, fecha_cur, accion_cur)
-> values(old.nom_curs , old.horas_cur , old.valor_cur , new.nom_curs,
new.horas_cur , new.valor_cur, new.cod_curs , current_user() , now() ,
'Actualización');
-> end;
-> //

mysql> delimiter //
mysql> create trigger trg_cursos_delete
-> after delete on cursos
-> for each row
-> begin
-> insert into aud_cursos(
-> Ant_nom_curs , Ant_horas_cur, Ant_valor_cur,cod_curs, usuario_curs,
fecha_cur, accion_cur)
-> values(old.nom_curs , old.horas_cur , old.valor_cur , current_user() , now()
, 'Borrado');
-> end;

--Esudiantes
mysql> create table audi_estudiantes(
-> aud_id_est int not null auto_increment primary key,
-> aud_nom_est_ant varchar(30) not null,
-> aud_ape_est_ant varchar(30) not null,
-> aud_edad_est_ant int(11) not null,
-> aud_nom_est_new varchar(30) not null,
-> aud_ape_est_new varchar(30) not null,
-> aud_edad_est_new int(11) not null,
-> usuario varchar(30) not null,
-> doc_est varchar(11) not null,
-> aud_fec_est datetime not null,
-> aud_accion varchar(20) not null
-> );
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //
mysql> create trigger trg_estudiantes_update
-> before update on estudiantes
-> for each row
-> begin
-> insert into audi_estudiantes(
-> aud_nom_est_ant , aud_ape_est_ant , aud_edad_est_ant , aud_nom_est_new ,
aud_ape_est_new , aud_edad_est_new , usuario, doc_est, aud_fec_est, aud_accion)
-> values(old.nom_est , old.ape_est , old.edad_est , new.nom_est,
new.edad_est , new.edad_est , current_user() , new.doc_est , now(), 'Update')
-> ;
-> end;
-> delimiter ;
-> //

mysql> delimiter //
mysql> create trigger trg_estudiantes_delete
-> after delete on estudiantes
-> for each row
-> begin
-> insert into audi_estudiantes(
-> aud_nom_est_ant , aud_ape_est_ant , aud_edad_est_ant , usuario , doc_est ,
aud_fec_est , aud_accion)
-> values(old.nom_est , old.ape_est , old.edad_est , current_user() , doc_est ,
now(), 'Delete')
-> ;
-> end;
-> delimiter
-> //

---CLIENTES
create trigger trg_clientes
before update on clientes
for each row
begin
insert into aud_clientes(
AUD_NOM_CLI_ANT , AUD_APE_CLI_ANT , AUD_DIR_CLI_ANT , AUD_DEP_CLI_ANT ,
MES_CUM_CLI_ant ,
AUD_NOM_CLI_NEW , AUD_APE_CLI_NEW , AUD_DIR_CLI_NEW,
AUD_DEP_CLI_NEW,MES_CUM_CLI_NEW,USUARIO,FEC_MOD,ACCION , AUD_ID_CLI_ANT ,
AUD_ID_CLI_NEW)

values
(:old.NOM_CLI, :old.APE_CLI, :old.DIR_CLI, :old.DEP_CLI, :old.MES_CUM_CLI, :new.NOM
_CLI,
:new.APE_CLI, :new.DIR_CLI, :new.DEP_CLI, :new.MES_CUM_CLI, user, SYSDATE,
'Actualización' ,
:OLD.ID_CLI , :NEW.ID_CLI);
end;

CREATE OR REPLACE TRIGGER CLIENTESDELETE


AFTER DELETE ON CLIENTES
FOR EACH ROW
BEGIN
INSERT INTO aud_clientes(
AUD_NOM_CLI_ANT , AUD_APE_CLI_ANT , AUD_DIR_CLI_ANT , AUD_DEP_CLI_ANT ,
MES_CUM_CLI_ant ,
AUD_NOM_CLI_NEW , AUD_APE_CLI_NEW , AUD_DIR_CLI_NEW,
AUD_DEP_CLI_NEW,MES_CUM_CLI_NEW,USUARIO,FEC_MOD,ACCION , AUD_ID_CLI_ANT ,
AUD_ID_CLI_NEW)

VALUES(:old.NOM_CLI, :old.APE_CLI, :old.DIR_CLI, :old.DEP_CLI, :old.MES_CUM_CLI, :n


ew.NOM_CLI,
:new.APE_CLI, :new.DIR_CLI, :new.DEP_CLI, :new.MES_CUM_CLI, user, SYSDATE,
'Actualización' , :OLD.ID_CLI , :NEW.ID_CLI);

END;

---TABLA ARTICULOS
create trigger trg_ARTICULOS_UPDATE
before update on ARTICULOS
for each row
begin
insert into aud_articulos(
AUDTITART_AN , AUDAUTART_AN , AUDEDIART_AN , AUDPRECART_AN , AUDTITART_NU ,
AUDAUTART_NU , AUDEDIART_NU , AUDPRECART_NU , ACCION , FECHAMOD , USUARIO , ID_ART)

values (:old.TIT_ART, :old.AUT_ART, :old.EDI_ART, :old.PREC_ART,


:new.TIT_ART, :new.AUT_ART, :new.EDI_ART, :new.PREC_ART, 'Actualización' , SYSDATE,
USER , :NEW.ID_ART);
end;

CREATE OR REPLACE TRIGGER ARTICULOSDELETE


AFTER DELETE ON ARTICULOS
FOR EACH ROW
BEGIN
insert into aud_articulos(
AUDTITART_AN , AUDAUTART_AN , AUDEDIART_AN , AUDPRECART_AN , AUDTITART_NU ,
AUDAUTART_NU , AUDEDIART_NU , AUDPRECART_NU , ACCION , FECHAMOD , USUARIO , ID_ART)

values (:old.TIT_ART, :old.AUT_ART, :old.EDI_ART, :old.PREC_ART,


:new.TIT_ART, :new.AUT_ART, :new.EDI_ART, :new.PREC_ART, 'DELETE' , SYSDATE, USER ,
:NEW.ID_ART);
END;

También podría gustarte