Tarea base de datos

Solo disponible en BuenasTareas
  • Páginas : 7 (1602 palabras )
  • Descarga(s) : 0
  • Publicado : 25 de febrero de 2012
Leer documento completo
Vista previa del texto
Desarrollo (parte 2)
“Lord of Highlands”
Ejercicio n° 3:
Implementar la función F_MONOP_JUG que retorna el porcentaje de recursos que un jugador posee, respecto del total disponible. Parámetros: nombre del jugador, nombre del recurso Se ejecuta así
CREATE OR REPLACE function F_MONOP_JUB (nombre_jugador in varchar2,nom_recurso in varchar2) return number is X number;
disp number;
cantnumber;
begin
select rec.disponibilidad, rj.cantidad into disp, cant from RECURSO rec, RECURSO_JUGADOR rj
where rec.nombre=nom_recurso and nombre_jugador=rj.jugador and rec.nombre=rj.recurso;
X:= 100* cant/disp;
RETURN X;
end;

CREATE OR REPLACE function F_MONOP_JUB (nombre_jugador in varchar2,nom_recurso in varchar2) return number is X number;
disp number;
cant number;
begin
selectrec.disponibilidad, rj.cantidad into disp, cant from RECURSO rec, RECURSO_JUGADOR rj
where rec.nombre=nom_recurso and nombre_jugador=rj.jugador and rec.nombre=rj.recurso;
X:= 100* cant/disp;
RETURN X;
end;

begin
dbms_output.put_line(f_monop_jub('pamela','Oro'));
end;
begin
dbms_output.put_line(f_monop_jub('pamela','Oro'));
end;

Salida

* Creé 2 variables de tipo number
*De las tablas RECURSO y RECURSO_JUGADOR, cuando la tupla cumple la condición de que :Nombre del jugador ingresado como parámetro sea igual al nombre del jugador de la tabla RECURSO_JUGADOR y que el nombre del recurso ingresado de parámetro es igual al nombre de la tabla RECURSO y que el nombre del recurso ingresado de parámetro sea igual al nombre de recurso de la tabla RECURSO_JUGADOR, si estase cumple de RECURSO ,seleccioné de la columna disponibilidad un dato y lo almacene en la variable disp, RECURSO_JUGADOR de la columna cantidad saque un dato y lo almacene en la variable cant.
* Con cant y disp calculo el porcentaje
X:= 100* cant/disp; (regla de 3)

Ejercicio n° 4:
Implementar la función F_CIUD_4TUN que retorna “S” o “N” dependiendo si en una ciudad existe al menosuna unidad de cada uno de los 4 tipos. Parámetros: nombre ciudad.
CREATE OR REPLACE function F_CIUD_4TUN (nombre_ciudad in varchar2) return varchar2 is R varchar2(3);
cursor TIPOS_U is select u.tipo from CIUDAD ciu, ELEMENTO e, UNIDAD u
where ciu.cant_unidades>=4 and ciu.nombre=e.ciudad and e.id_elem=u.id_elem and nombre_ciudad=ciu.nombre;
tipo1 UNIDAD.tipo%type;
soldado boolean;
obreroboolean;
medico boolean;
cientifico boolean;
begin
R:='N';
open TIPOS_U;
loop
fetch TIPOS_U into tipo1;
exit when TIPOS_U%NOTFOUND or R='S';
if(tipo1='Soldado')then soldado:=true;
elsif(tipo1='Medico')then medico:=true;
elsif(tipo1='Obrero')then obrero:=true;
elsif(tipo1='Cientifico')then cientifico:=true;
end if;
if (soldado and medico and obrero and cientifico)then R:='S';
end if;end loop;
close TIPOS_U;
RETURN R;
end;

CREATE OR REPLACE function F_CIUD_4TUN (nombre_ciudad in varchar2) return varchar2 is R varchar2(3);
cursor TIPOS_U is select u.tipo from CIUDAD ciu, ELEMENTO e, UNIDAD u
where ciu.cant_unidades>=4 and ciu.nombre=e.ciudad and e.id_elem=u.id_elem and nombre_ciudad=ciu.nombre;
tipo1 UNIDAD.tipo%type;
soldado boolean;
obrero boolean;
medicoboolean;
cientifico boolean;
begin
R:='N';
open TIPOS_U;
loop
fetch TIPOS_U into tipo1;
exit when TIPOS_U%NOTFOUND or R='S';
if(tipo1='Soldado')then soldado:=true;
elsif(tipo1='Medico')then medico:=true;
elsif(tipo1='Obrero')then obrero:=true;
elsif(tipo1='Cientifico')then cientifico:=true;
end if;
if (soldado and medico and obrero and cientifico)then R:='S';
end if;
end loop;
closeTIPOS_U;
RETURN R;
end;

Se ejecuta asíbegin
dbms_output.put_line(f_ciud_4tun('sincity'));
end;
begin
dbms_output.put_line(f_ciud_4tun('sincity'));
end;

Salida Negativa

Salida Positiva

Tuve que trabajar con cursores q me entregaran desde una selección de tablas que cumplían con una condiciones una tabla de la cual yo pudiera tener la lista de unidades que tenía una...
tracking img