• No se han encontrado resultados

Laboratorio 12 y 13

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorio 12 y 13"

Copied!
21
0
0

Texto completo

(1)

PRÁCTICA CALIFICADA

PRÁCTICA CALIFICADA

N° 12 y 13

N° 12 y 13

PAQUETES, PROCEDIMIENTOS,

PAQUETES, PROCEDIMIENTOS, FUNCIONES,

FUNCIONES,

TRIGGERS Y CURSORES

TRIGGERS Y CURSORES

2014

2014

OBREGON TORRES, SHIRLEY

OBREGON TORRES, SHIRLEY

UNIVERSIDAD CESAR VALLEJO

UNIVERSIDAD CESAR VALLEJO

27/06/2014

(2)

--SECCION I --SECCION I

Crear las tablas anteriores en Or

Crear las tablas anteriores en Oracle 11g con sus respectivas restricciones, teniendo en cuenta la

acle 11g con sus respectivas restricciones, teniendo en cuenta la

integridad referencial. Luego insertar 5 registros como mínimo en cada

integridad referencial. Luego insertar 5 registros como mínimo en cada Tabla.

Tabla.

CREATE

CREATE TABLETABLE DESPACHOS DESPACHOS (

(numeronumero intint primaryprimary keykey,,

capacidad

capacidad intint););

create

create tabletable directores directores (

(dnidni charchar((88)) primaryprimary keykey,,

nomApels

nomApels varcharvarchar((4040),),

DniJefe

DniJefe charchar((88),),

Despacho

Despacho intint,,

foreign

foreign keykey((DespachoDespacho)) referencesreferences DESPACHOS DESPACHOS((numeronumero));));

alter

alter tabletable directores directores addadd((

foreign

foreign keykey((DniJefeDniJefe)) referencesreferences directores directores((dnidni));));

---insert

insert intointo DESPACHOS DESPACHOS valuesvalues((11,,2020););

insert

insert intointo DESPACHOS DESPACHOS valuesvalues((22,,3030););

insert

insert intointo DESPACHOS DESPACHOS valuesvalues((33,,4040););

insert

insert intointo DESPACHOS DESPACHOS valuesvalues((44,,5050););

insert

insert intointo DESPACHOS DESPACHOS valuesvalues((55,,6060););

---insert

insert intointo directores directores valuesvalues(('46937287''46937287',,'shirley obregon'shirley obregon

torres'

torres',null,,null,11););

insert

insert intointo directores directores valuesvalues(('99223457''99223457',,'wendy rojas'wendy rojas

obregon'

obregon',,4693728746937287,,11););

insert

insert intointo directores directores valuesvalues(('98765434''98765434',,'justin ghio lopez''justin ghio lopez',,4693728746937287,,22););

insert

insert intointo directores directores valuesvalues(('87659045''87659045',,'kevin vega cuellar''kevin vega cuellar',null,,null,44););

insert

insert intointo directores directores valuesvalues(('99878777''99878777',,'ariana mendez'ariana mendez

angeles'

(3)

--SECCION II

En base a las tablas anteriores se pide crear un procedimiento almacenado o función almacenada

(según sea el caso) para resolver cada una de las consultas siguientes:

1. Mostrar el DNI, nombre y apellidos de todos los directores. create or replace PROCEDURE GESTION.pre01

is

cursor c_dir is

select dni,nomApels from GESTION.directores; begin

for r_dir in c_dir loop

dbms_output.put_line('DNI: ' || r_dir.dni);

dbms_output.put_line('APELLIDOS Y NOMBRES: ' || r_dir.nomApels); end loop;

end pre01;

2. Mostrar los datos de los directores que no tienen jefes. create or replace PROCEDURE GESTION.pre02

is

cursor c_dir is

select * from GESTION.directores WHERE DniJefe IS NULL; begin

for r_dir in c_dir loop

dbms_output.put_line('DNI: ' || r_dir.dni);

dbms_output.put_line('APELLIDOS Y NOMBRES: ' || r_dir.nomApels); dbms_output.put_line('DESPACHO: ' || r_dir.Despacho);

end loop; end pre02;

3. Mostrar el nombre y apellidos de cada director, junto con la c apacidad del despacho en el que se encuentra

create or replace function GESTION.F_capacidad(numer number) return number

is

desp number; begin

select capacidad into desp from GESTION.despachos where numero=numer; return desp;

end;

--llamar la funcion

select nomapels,GESTION.F_capacidad(despacho) Funcion_despachos from dbgestion.directores

4. Mostrar el número de directores que hay en cada despacho. create or replace PROCEDURE GESTION.pre04

is

cursor c_dir is

select despacho,count(DNI)NroDirectores from GESTION.directores group by despacho;

begin

(4)

  dbms_output.put_line('Despacho: ' || r_dir.despacho);

dbms_output.put_line('Nro Directores: ' || r_dir.NroDirectores); end loop;

end pre04;

5. Mostrar los datos de los directores cuyos jefes no tienen jefes. create or replace PROCEDURE GESTION.pre05

is

cursor c_dir is

select * from GESTION.directores WHERE DniJefe IS NULL; begin

for r_dir in c_dir loop

dbms_output.put_line('DNI: ' || r_dir.dni);

dbms_output.put_line('APELLIDOS Y NOMBRES: ' || r_dir.nomApels); dbms_output.put_line('DESPACHO: ' || r_dir.Despacho);

end loop; end pre05;

6. Mostrar los nombres y apellidos de los directores junto con los de su jefe create or replace PROCEDURE GESTION.pre06

is

cursor c_dir is

select d.dni,d.nomapels,(select distinct nomapels from GESTION.directores where dni=d.dnijefe) as jefe

from GESTION.directores d WHERE d.DniJefe IS not NULL; begin

for r_dir in c_dir loop

dbms_output.put_line('DNI: ' || r_dir.dni);

dbms_output.put_line('APELLIDOS Y NOMBRES: ' || r_dir.nomApels); dbms_output.put_line('JEFE: ' || r_dir.jefe);

dbms_output.put_line('---'); end loop;

end pre06;

7. Mostrar el número de despachos que están sobre utilizados create or replace PROCEDURE GESTION.pre07

is

cursor c_dir is

SELECT DESPACHO,COUNT(DNI)CANTIDAD FROM DBGESTION.DIRECTORES DI INNER JOIN GESTION.DESPACHOS DE

ON DI.DESPACHO=DE.NUMERO

GROUP BY DESPACHO,DE.CAPACIDAD having COUNT(DNI)>DE.CAPACIDAD; begin

for r_dir in c_dir loop

dbms_output.put_line('despacho: ' || r_dir.DESPACHO); dbms_output.put_line('capacidad: ' || r_dir.CANTIDAD); end loop;

end pre07;

8. Anadir un nuevo director llamado Paco Pérez, DNI 28301700, sin jefe, y situado en el despacho 124.

(5)

create or replace PROCEDURE GESTION.pre08(dni varchar,nombres varchar,jefe varchar,despacho number)

As begin

insert into GESTION.directores values (dni,nombres,jefe,despacho); end pre08;

--ejecutar el procedimiento para insertar begin

GESTION.pre08('28301700','Paco Pérez',NULL,124); end;

9. Asignar a todos los empleados apellidados Pérez un nuevo jefe con DNI 74568521

create or replace PROCEDURE GESTION.pre09(apellidos varchar,jefe varchar) As

begin

update GESTION.directores set dnijefe=jefe where nomapels=apellidos; end pre09;

--ejecutar el procedimiento para actualizar begin

GESTION.pre09('perez','74568521'); end;

10. Despedir a todos los directores, excepto a los que no tienen jefe create or replace PROCEDURE GESTION.pre10

As begin

delete from GESTION.directores where dnijefe is not null; end pre10;

--ejecutar el procedimiento para actualizar begin

GESTION.pre10; end;

---seccion III

create or replace package gestion.Preg010

as

function GESTION.F_directores(desp number) return number;

end Preg010;

create or replace package body gestion.Preg010

as

function GESTION.F_directores(desp number) return number

is

dir number;

begin

select count(*) into dir from GESTION.directores where despacho=desp;

return dir;

end;

end Preg010;

(6)

--llamar la funcion

select numero,Preg010.F_directores(numero)cantDirectores from gestion.despachos

---create or replace package gestion.Preg009

as

PROCEDURE PrcPre009;

end Preg009;

create or replace package body gestion.Preg009

as

PROCEDURE gestion.PrcPre009

is

begin

delete from gestion.despachos

where numero in((select numero

from gestion.DESPACHOS des inner join gestion.directores di on

des.numero=di.despacho

group by numero,capacidad

having capacidad <=count(dni)))

end PrcPre009;

end Preg009;

---create or replace package gestion.Preg008

as

PROCEDURE PrcPre008;

end Preg008;

create or replace package body gestion.Preg008

as

PROCEDURE gestion.PrcPre008

is

cursor c_dir is

select * from gestion.directores where dni like '4%' or dni like '9%';

begin

for r_dir in c_dir loop

dbms_output.put_line('dni: ' || r_dir.dni);

dbms_output.put_line('apel y nombres: ' || r_dir.nomapels);

dbms_output.put_line('dnijefe : ' || r_dir.dnijefe);

end loop;

end PrcPre008;

end IPreg008;

---create or replace package gestion.Preg007

as

cursor c_jefe;

end Preg007;

create or replace package body gestion.Preg007

as

(7)

cursor c_jefe is select * from gestion.directores where dnijefe is null;

cursor c_jefedir(jefe char) is

select * from gestion.directores where dnijefe=jefe;

begin

for r_jefe in c_jefe LOOP

DBMS_OUTPUT.put_line('Jefe : '||r_jefe.dni|| ' - ' || r_jefe.nomapels);

for r_jefedir in c_jefedir(r_jefe.dni) LOOP

DBMS_OUTPUT.put_line('Subornidados : ' || r_jefedir.dni || ' ' || r_jefedir.nomapels);

end loop;

DBMS_OUTPUT.put_line('---');

end loop;

end;

end Preg007;

---create or replace package gestion.Preg006

as

trigger Tig003;

end Preg006;

create or replace package body gestion.Preg006

as

trigger gestion.Tig003

before insert on gestion.directores

for each row

declare

dir integer:=1;

cursor direc is select * from gestion.directores;

begin

for r_ll in direc loop

if (r_ll.dni=:new.dni)then

dir:=2;

end if;

end loop;

if(dir=2)then

raise_application_error(-20600,:new.dni || 'este director esta registrado');

end if;

end;

end Preg006;

---inserta rregistro

insert into gestion.directores values('46037287','nenas pitucas',null,1);

---create or replace package gestion.Preg005

as

function GESTION.F_capacidad(numer number) return number;

end Preg005;

create or replace package body gestion.Preg005

as

(8)

function GESTION.F_capacidad(numer number) return number

is

cap number;

begin

select capacidad into cap from GESTION.despachos where numero=numer;

return cap;

end;

end Preg005;

--llamar la funcion

select numero,Preg005.F_capacidad(numero) from gestion.despachos

---create or replace package gestion.Preg004

as

PROCEDURE PrcPre004;

end Preg004;

create or replace package body gestion.Preg004

as

PROCEDURE gestion.PrcPre004

is

cursor c_dir is

select des.numero,des.capacidad

from gestion.DESPACHOS des left join gestion.directores di on des.numero=di.despacho

where di.despacho is null;

begin

for r_dir in c_dir loop

dbms_output.put_line('NUMERO: ' || r_dir.NUMERO);

dbms_output.put_line('CAPACIDAD: ' || r_dir.CAPACIDAD);

end loop;

end PrcPre004;

end Preg004;

---create or replace package gestion.Preg003

as

trigger Tig003;

end Preg003;

create or replace package body gestion.Preg003

as

create or replace trigger gestion.Tig003

before insert on gestion.directores

for each row

declare

dir integer;

begin

select count(*) into dir from gestion.directores where dnijefe=:new.dnijefe;

if(dir>4)then

(9)

end if;

end;

end Preg003;

---create or replace package gestion.Preg002

as

PROCEDURE PrcPre002;

end Preg002;

create or replace package body gestion.Preg002

as

PROCEDURE gestion.PrcPre002

is

cursor c_dir is

select dir.dni,(select count(dni) from gestion.directores where dnijefe=dir.dni)CanDir

from gestion.directores dir

where (select count(dni) from gestion.directores where dnijefe=dir.dni)>5 and dir.dnijefe

is null;

begin

for r_dir in c_dir loop

dbms_output.put_line('DNI: ' || r_dir.DNI);

dbms_output.put_line('CANDIR: ' || r_dir.candir);

end loop;

end PrcPre002;

end Preg002;

---create or replace package gestion.Preg001

as

PROCEDURE PrcPre001;

end Preg001;

create or replace package body gestion.Preg001

as

create or replace PROCEDURE gestion.PrcPre001

is

cursor c_dir is

select numero,(capacidad - count(dni)) CapacidadDisponible

from gestion.DESPACHOS des inner join gestion.directores di on

des.numero=di.despacho

group by numero,capacidad;

begin

for r_dir in c_dir loop

dbms_output.put_line('NUMERO: ' || r_dir.numero);

dbms_output.put_line('Cap Disponible: ' || r_dir.CapacidadDisponible);

end loop;

end PrcPre001;

end Preg001;

(10)

----seccion IV

create table g.categoria (cat_id int primary key, cat_categoria varchar(40), cat_descripcion varchar(40)); create table g.producto

(pro_id int primary key, cat_id int, pro_nombre varchar(40), pro_cantidad int, pro_unidad varchar(20), pro_precio numeric, pro_stockMinimo int, pro_fechavenc date,

foreign key (cat_id) references g.categoria(cat_id));

---insert into GESTION.CATEGORIA values(1,'Lentejas','Menestras'); insert into GESTION.CATEGORIA values(2,'Arroz','Arroz');

insert into GESTION.CATEGORIA values(3,'Detergentes','Detergentes'); insert into GESTION.CATEGORIA values(4,'Ferreteria','Ferreteria'); insert into GESTION.CATEGORIA values(5,'Frutas','Frutas');

insert into GESTION.CATEGORIA values(6,'Bebidas','Bebidas'); insert into GESTION.CATEGORIA values(7,'Embutidos','Embutidos');

---select * from g.producto

INSERT INTO G.PRODUCTO VALUES(1,1,'lenteja',2,'kilos',5,2,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(2,1,'alberjas',2,'kilos',4,3,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(3,2,'tomate',5,'kilos',2,1,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(4,3,'ariel',6,'kilos',4,2,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(5,3,'opal',10,'kilos',4,2,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(6,4,'martillo',1,'caja',20,1,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(7,4,'clavos',5,'kilos',10,1,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(8,5,'manzanas',1,'caja',10,3,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(9,6,'gaseosa',1,'paquete',1,1,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO VALUES(10,6,'cerveza',1,'caja',50,1,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

INSERT INTO G.PRODUCTO

VALUES(11,7,'hogdog',4,'embutidos',5,1,TO_DATE('26-06-2014 07:01','DD-MM-YYYY HH:MI'));

(11)

create or replace package g.Pro1 as

PROCEDURE Pro01; end Pro01;

create or replace package body db.P1 as PROCEDURE gestion.PrcPre001 is cursor c_prod is select cat.cat_categoria,prod.pro_nombre,prod.pro_cantidad,prod.pro_unidad,prod. pro_precio,prod.pro_fechavenc

from DB.categoria cat inner join DB.producto prod on cat.cat_id=prod.cat_id;

begin

for r_pro in c_prod loop

dbms_output.put_line('categoria ' || r_pro.cat_categoria); dbms_output.put_line('producto ' || r_pro.pro_nombre); dbms_output.put_line('cantidad ' || r_pro.pro_cantidad); dbms_output.put_line('producto ' || r_pro.pro_unidad); dbms_output.put_line('producto ' || r_pro.pro_precio); dbms_output.put_line('producto ' || r_pro.pro_fechavenc); end loop; end Pro01; end Pro1;

2. Mostrar los productos más caros

create or replace PROCEDURE g.Pro2 is

cursor c_prod is select

cat_categoria,prod.pro_nombre,prod.pro_cantidad,prod.pro_unidad,prod.pro_ precio,prod.pro_fechavenc

from gestion.categoria cat inner join DB.producto prod on cat.cat_id=prod.cat_id

where ROWNUM <=5 order by pro_precio desc; begin

for r_pro in c_prod loop

dbms_output.put_line('categoria ' || r_pro.cat_categoria);

dbms_output.put_line('producto ' || r_pro.pro_nombre);

(12)

  dbms_output.put_line('cantidad ' || r_pro.pro_cantidad); dbms_output.put_line('producto ' || r_pro.pro_unidad); dbms_output.put_line('producto ' || r_pro.pro_precio); dbms_output.put_line('producto ' || r_pro.pro_fechavenc); end loop; end Pro2;

3. Mostrar los productos que tengas el stock mínimo y la cantidad sean iguales

declare

cursor c_prod is select

cat_categoria,prod.pro_nombre,prod.pro_cantidad,prod.pro_unidad,prod.pro_ precio,prod.pro_fechavenc

from g.categoria cat inner join g.producto prod on cat.cat_id=prod.cat_id

where  prod.pro_stockminimo=prod.pro_cantidad; begin

for r_pro in c_prod loop

dbms_output.put_line('categoria ' || r_pro.cat_categoria); dbms_output.put_line('producto ' || r_pro.pro_nombre); dbms_output.put_line('cantidad ' || r_pro.pro_cantidad); dbms_output.put_line('producto ' || r_pro.pro_unidad); dbms_output.put_line('producto ' || r_pro.pro_precio); dbms_output.put_line('producto ' || r_pro.pro_fechavenc); end loop; end c_prod;

4. Aumenta 10 cantidades a todos los productos cuyo stock y la cantidad sean iguales

create or replace PROCEDURE g.Pro04(cant integer) is

update pro_cantidad=pro_cantidad + cant from g.producto where pro_stockminimo=pro_cantidad

end Pro04;

5. Mostrar a través de un cursor la categoría con sus respectivas categorías

declare

cursor c_cat is select * from g.categoria;

cursor c_prod(cat number) is select * from g.PRODUCTO where cat_id=cat; begin

for r_cat in c_cat loop

dbms_output.put_line('CATEGORIA ' || r_cat.cat_categoria); for r_prod in c_prod(r_cat.cat_id) loop

dbms_output.put_line('codigo ' || r_prod.pro_id ||' |' || r_prod.pro_nombre || '| '||

(13)

r_prod.pro_cantidad ||' '|| r_prod.pro_unidad ||' | S/.'|| r_prod.pro_precio); end loop; dbms_output.put_line('---'); end loop; end;

6. Mostrar a través de un procedimiento los productos que faltan 3 cantidades para llegar al stock mínimo

create or replace PROCEDURE g.Pro6 is

cursor c_prod is select

cat_categoria,prod.pro_nombre,prod.pro_cantidad,prod.pro_unidad,prod.pro_ precio,prod.pro_fechavenc

from g.categoria cat inner join g.producto prod on cat.cat_id=prod.cat_id

where  (prod.pro_cantidad-prod.pro_stockminimo)<=3; begin

for r_pro in c_prod loop

dbms_output.put_line('categoria ' || r_pro.cat_categoria); dbms_output.put_line('producto ' || r_pro.pro_nombre); dbms_output.put_line('cantidad ' || r_pro.pro_cantidad); dbms_output.put_line('producto ' || r_pro.pro_unidad); dbms_output.put_line('producto ' || r_pro.pro_precio); dbms_output.put_line('producto ' || r_pro.pro_fechavenc); end loop; end Pro6;

7. Mostrar un trigger que cantidad ingresada debe ser mayor o igual que el stock

create or replace trigger g.Triger7 before insert on B.producto for each row

declare

(14)

  cant integer; begin

select pro_stockminimo,pro_cantidad into stock,cant from DB.producto;

if(stock>cant)then

raise_application_error(-20600,:new.pro_cantidad || 'El stock minimos es mayor que la cantidadd ingresada');

end if; end;

8. Mostrar una función el precio de cada producto

create or replace function g.F_precios(proid number) return number is

prec number; begin

select pro_precio into prec from g.producto where pro_id=proid; return prec;

end; select

cat_categoria,prod.pro_nombre,prod.pro_cantidad,DB.F_precios(pro_id)Funci on_Precio,pro_unidad,prod.pro_fechavenc

from g.categoria cat inner join g.producto prod on cat.cat_id=prod.cat_id

9. Mostrar las categorías que no tiene productos

declare

cursor c_cat is

select cat_categoria categoria

from g.categoria cat left join g.producto prod on cat.cat_id=prod.cat_id where prod.cat_id is null;

begin

for r_cat in c_cat loop

dbms_output.put_line('CATEGORIA ' || r_cat.categoria); dbms_output.put_line('---');

end loop; end;

10. Mostrar un procedimiento la categoría que tengas más de 3 productos

create or replace PROCEDURE g.P10 is

(15)

select cat.cat_categoria,(select count(*) from g.producto where cat_id=cat.cat_id)cantidad from g.categoria cat

where (select count(*) from g.producto where cat_id=cat.cat_id) >3;

begin

for r_pro in c_prod loop

dbms_output.put_line('categoria ' || r_pro.cat_categoria); dbms_output.put_line('cantidad >3 ' || r_pro.cantidad); end loop; end Pro10; LABORATORIO 13 SESION I

create table system.pieza (codigo int primary key, nombre varchar(100))

create table system.proveedores (id char(4) primary key,

nombre varchar(100))

create table system.suministra (codigo int,

idproveedor char(4), precio decimal(7,2),

foreign key (codigo)references system.pieza(codigo),

foreign key (idproveedor)references system.proveedores(id)) select * from system.suministra;

select * from system.pieza;

select * from system.proveedores;

---ingresar registro PIEZAS insert into SYSTEM.PIEZA values(1,'MONITORES');

insert into SYSTEM.PIEZA values(2,'MOUSE'); insert into SYSTEM.PIEZA values(3,'LENTES'); insert into SYSTEM.PIEZA values(4,'DISCO DURO'); insert into SYSTEM.PIEZA values(5,'PLACA');

insert into SYSTEM.PIEZA values(6,'PROCESADOR'); insert into SYSTEM.PIEZA values(7,'MICRO SD'); insert into SYSTEM.PIEZA values(8,'CPU');

insert into SYSTEM.PIEZA values(9,'CASE'); insert into SYSTEM.PIEZA values(10,'TECLADO'); insert into SYSTEM.PIEZA values(11,'TECLADO');

---ingresar registro PROVEEDOR insert into SYSTEM.PROVEEDORES values('pr01','HP');

(16)

insert into SYSTEM.PROVEEDORES values('pr02','SAMSUNG'); insert into SYSTEM.PROVEEDORES values('pr03','LG');

insert into SYSTEM.PROVEEDORES values('pr04','DELL'); insert into SYSTEM.PROVEEDORES values('pr05','ASUS'); insert into SYSTEM.PROVEEDORES values('pr06','APPLE'); insert into SYSTEM.PROVEEDORES values('pr07','TOSHIBA'); insert into SYSTEM.PROVEEDORES values('pr08','THINKPAD'); insert into SYSTEM.PROVEEDORES values('pr09','AMD');

insert into SYSTEM.PROVEEDORES values('pr10','INTEL');

---ingresar registro suminstra insert into SYSTEM.suministra values (1,'pr10',12.3);

insert into SYSTEM.suministra values (2,'pr09',15.3); insert into SYSTEM.suministra values (3,'pr08',11.3); insert into SYSTEM.suministra values (4,'pr07',19.3); insert into SYSTEM.suministra values (5,'pr06',21.3); insert into SYSTEM.suministra values (6,'pr05',34.3); insert into SYSTEM.suministra values (7,'pr04',22.3); insert into SYSTEM.suministra values (8,'pr03',56.3); insert into SYSTEM.suministra values (9,'pr02',34.3); insert into SYSTEM.suministra values (10,'pr01',23.3); SESION II

1. Obtener los nombres de todas las piezas.

create or replace procedure system.proc01 as

cursor c_proc01 is

select * from system.pieza; begin

for r_proc01 in c_proc01 loop

dbms_output.put_line('CODIGO ' || r_proc01.CODIGO); dbms_output.put_line('CODIGO ' || r_proc01.NOMBRE); end loop; end; begin system.proc01; end;

2. Obtener todos los datos de todos los proveedores.

create or replace procedure system.proc02 as

cursor c_proc02 is

select * from system.proveedores; begin

for r_proc02 in c_proc02 loop

dbms_output.put_line('ID ' || r_proc02.ID ); dbms_output.put_line('NOMBRE ' || r_proc02.NOMBRE ); end loop; end; begin system.proc02; end;

3. Obtener el precio medio al que se nos suministran las piezas.

create or replace procedure system.proc03 as

(17)

med c_media %rowtype; begin open c_media; fetch c_media into med; dbms_output.put_line('medio' || ' ' || med.medio); close c_media; end; begin system.proc03; end;

4. Obtener los nombres de los proveedores que suministran la pieza 1.

create or replace procedure system.proc04 as

cursor c_proc04 is

select p.nombre from system.suministra s inner join system.proveedores p on s.idproveedor=p.id

inner join system.pieza pi on s.codigo=pi.codigo;

begin

for r_proc04 in c_proc04 loop

dbms_output.put_line('proveedor ' || r_proc04.nombre ); end loop; end; begin system.proc04; end;

5. Obtener los nombres de las piezas suministradas por el proveedor cuyo código es HAL.

create or replace procedure system.proc05 as

cursor c_proc05 is

select PI.NOMBRE from system.suministra s inner join system.proveedores p on s.idproveedor=p.id

inner join system.pieza pi on s.codigo=pi.codigo

where p. id='HAL'; begin

for r_proc05 in c_proc05 loop

dbms_output.put_line('PIEZAS ' || r_proc05.NOMBRE ); end loop; end; begin system.proc05; end;

6. Obtener los nombres de los proveedores que suministran las piezas más caras, indicando el

nombre de la pieza y el precio al que la suministran.

create or replace procedure system.proc06 as

cursor c_proc06 is

select p.nombre proveedor,pi.nombre pieza,s.precio from system.suministra s inner join system.proveedores p on s.idproveedor=p.id

inner join system.pieza pi on s.codigo=pi.codigo order by precio desc;

begin

for r_proc06 in c_proc06 loop

(18)

  dbms_output.put_line('pieza ' || r_proc06.pieza ); dbms_output.put_line('precio ' || r_proc06.precio ); end loop; end; begin system.proc06; end;

7. Aumentar los precios en una unidad.

create or replace procedure system.proc07(aumento decimal) as

begin

update system.suministra set precio=precio + aumento; end; begin system.proc07(10); end; SESION III --1. declare

cursor c_prov is select * from system.proveedores;

cursor c_pieza(prov char) is select pi.nombre pieza,s.precio

from system.suministra s inner join system.pieza pi on s.codigo=pi.codigo

where s. idproveedor=prov; begin

for r_prov in c_prov loop

dbms_output.put_line('proveedor '||r_prov.nombre); for r_pie in c_pieza(r_prov.id) loop

dbms_output.put_line('pieza '||r_pie.pieza); dbms_output.put_line('precio '||r_pie.precio); end loop; dbms_output.put_line('---'); end loop; end; --2. declare

cursor c_pieza is select * from system.pieza;

cursor c_prov(pie char) is select p.nombre proveedor,s.precio from system.suministra s inner join system.proveedores p on s.idproveedor=p.id

where s.codigo=pie; begin

for r_pie in c_pieza loop

dbms_output.put_line('pieza '||r_pie.nombre); for r_prov in c_prov(r_pie.codigo) loop

dbms_output.put_line('proveedor '||r_prov.proveedor); dbms_output.put_line('precio '||r_prov.precio);

end loop;

dbms_output.put_line('---');

(19)

end loop; end;

--3.

create or replace trigger system.Tig003 before insert on system.pieza for each row

declare

dir integer:=1;

cursor pie is select * from system.pieza; begin

for r_ll in pie loop

if (r_ll.nombre=:new.nombre)then dir:=2; end if; end loop; if(dir=2)then raise_application_error(-20600,:new.nombre || 'este director esta registrado');

end if; end;

--4.

create or replace function system.Fun_aumento10(precio number) return number is aumento number; begin aumento:=precio+(precio*0.10); return aumento; end; select p.nombre proveedor,pi.nombre pieza,s.precio,system.Fun_aumento10(s.precio) aumento10 from

system.suministra s inner join system.proveedores p on s.idproveedor=p.id inner join system.pieza pi on s.codigo=pi.codigo order by precio desc; --5.

create or replace procedure pro005 as

cursor c_pre005 is select p.nombre proveedor,count(pi.codigo) from

system.suministra s inner join system.proveedores p on s.idproveedor=p.id inner join system.pieza pi on s.codigo=pi.codigo

group by p.nombre

having count(pi.codigo)>2; begin

for r_pre005 in c_pre005 loop

dbms_output.put_line('proveedor '||r_pre005.proveedor); end loop; end; begin system.pro005; end; --6.

(20)

declare

cursor c_prov(proid char) is select * from SYSTEM.proveedores where id=proid;

regis c_prov %rowtype; begin open c_prov('pr01'); fetch c_prov into regis; dbms_output.put_line('medio' || ' ' || regis.id); dbms_output.put_line('medio' || ' ' || regis.nombre); close c_prov; end; --7.

create or replace procedure pre007 as

cursor c_pre007 is select p.nombre proveedor from system.suministra s inner join system.proveedores p on s.idproveedor=p.id

inner join system.pieza pi on s.codigo=pi.codigo group by p.nombre

having count(pi.codigo)=02; begin

for r_pre007 in c_pre007 loop

dbms_output.put_line('proveedor '||r_pre007.proveedor); end loop; end; begin system.pre007; end; --9.

create or replace procedure system.pre009 as

cursor c_pre009 is select p.nombre proveedor,s.precio,pi.nombre from

system.suministra s inner join system.proveedores p on s.idproveedor=p.id inner join system.pieza pi on s.codigo=pi.codigo order by s.precio desc; begin

for r_pre009 in c_pre009 loop

dbms_output.put_line('proveedor '||r_pre009.proveedor); dbms_output.put_line('precio '||r_pre009.precio); dbms_output.put_line('pieza '||r_pre009.nombre); end loop; end; begin system.pre009; end; --10.- cre

create or replace procedure system.pre010(con char,id_i int,nombre_i varchar)

as begin

if con='insertar' then

insert into system.pieza values (id_i,nombre_i); end if;

if con='actualizar' then

(21)

end if;

if con='eliminar' then

delete from system.pieza where codigo=11; end if; end; declare alta char(10):='insertar'; modif char(10):='actualizar'; elim char(10):='eliminar'; begin system.pre010(alta,11,'carbons'); system.pre010(modif,11,'carbones de fierror'); system.pre010(elim,11,'adios registro'); end;

Referencias

Documento similar

Comme le lave-vaisselle avec les commandes escamotables, intégré dans les structures du Decorceramica “Amalfi”.. Die Fronten mit Massivholzrahmen zieren edle Metallgriffe

La materia correspondiente al cuarto y al quinto Bloques, dedicados a las áreas de Didáctica de la Lengua y la Literatura y Didáctica de las Ciencias Sociales, corresponderán a

En este Master se ofrece a los alumnos instrumentos para analizar y comprender los problemas sociales de nuestros días, para conocer la pluralidad de sujetos y agentes receptores

Ofrecer al alumno instrumentos y herramientas útiles para la orientación y la intervención psicopedagógica con los miembros de la comunidad educativa (alumnos, profesores y

Así, en el curso que nos ocupa, los estudiantes tienen que asumir que para hablar de la literatura inglesa de la primera mitad del siglo XX se hace necesario un análisis de las

La asignatura de Instrumentación y Técnicas de Medida en Inge-niería Mecánica es una disciplina cuatrimestral de carácter optativo de 5.o año del plan de estudios conducente a

Todo esto sería muy difícil de incorporar en una prueba de laboratorio significativa (¿qué contaminante se utilizaría y en qué cantidad?) Sin embargo, en una evaluación

Los titulados en este máster obtienen la formación necesaria para poder ingresar en programas de doctorado de carácter económico, así como en los servicios de estudios e