Вы находитесь на странице: 1из 9

Examen SQL

1) Crearlossiguientesusuarios:
MSVENTAS
,
MSINVENTARIO,MSCONTROL,
MSRESERVAS
2) Conectarsealabasededatosconelusuario
MSVENTAS
3) EjecutarelsiguienteScript.
--adaptamos el formato de fecha
ALTER SESSION SET NLS_DATE_FORMAT
=
'DD-MM-YYYY HH24:MI';

--definici

n de las tablas
create table clientes(id integer primary key,nombre varchar
(
20)
);
create table vendedores(id integer primary key,nombre varchar
(
20)
);
create table ventas(idCliente integer,idVendedor integer, importe integer,fecha date,
primary key
(
idCliente
,
idVendedor
,
fecha
),
foreign key
(
idCliente
)references clientes
(
id
),
foreign key
(
idVendedor
)references vendedores
(
id
),
check
(
importe
>
0)
);
--insertamos valores
insert
intovendedores values
(
1
,
'Bertoldo'
);
insert
intovendedores values
(
2
,
'Herminia'
);
insert
intoclientes values
(
41
,
'Calixto'
);
insert
intoclientes values
(
42
,
'Melibea'
);
insert
intoventas values
(
41
,
1
,
500
,
'14-2-2007 15:30'
);
insert
intoventas values
(
41
,
2
,
120
,
'14-2-2007 14:20'
);
insert
intoventas values
(
42
,
2
,
350
,
'5-1-2007 10:14'
);
insert
intoventas values
(
42
,
2
,
180
,
'5-1-2007 10:15'
);
insert
intoventas values
(
42
,
2
,
180
,
'31-12-2006 18:30'
);

Obtenerunlistadoquemuestrelasforeignkeysenlastablasdelusuario
MSVENTAS_NN.Laconsultadebemostrarelnombredelatabla'hija'(laquecontiene
lareferencia)ylatabla'madre'alaquesereferencia.Ejemplo:
TABLA_MADRETABLA_HIJAFOREIGN_KEY
==========================================
xxx_madrexxx_hijaxxx_llave

4) Ejecutarlassiguientesconsultasconelusuario
MSINVENTARIO.

Escribircdigoparamostrarelnombredecadavendedorjuntoconeltotaldelasventas
queharealizadoordenadospornombre(sesuponequeelnombreesnico).
Nombredelclientequemshacomprado(slohayunoysunombreesnico).
Sugerencia:usarunavista.
Enlavistamostrartodoslosclientesyeltotaldeloqueha
comprado.Apartirdelavistaobteneralclientequemshacomprado.
Mostrarelnombredelosusuariosquetenganalgunatablaconnombre
VENTAS.

5) Ingresaralabasededatosconelusuario
MSCONTROL
Ejecutarlassiguientessentencias
create table taviones
(
tipo varchar
(
15
)primary key
,capacidad
int
);
create table tvuelos
(
id varchar
(
10
)primary key
,tipoavion references taviones
,
pasajeros
int
,destino varchar
(
20
)
);
create table tpasajeros
(
nombre varchar
(
20
),vuelo references tvuelos
,primary
key
(
nombre
,
vuelo
));
insert
intotaviones values
(
'Airbus A300'
,
120
);
insert
intotaviones values
(
'Boeing 707'
,
210
);
insert
intotaviones values
(
'Douglas DC-9'
,
190
);
insert
intotvuelos values
(
'LHE 100'
,
'Airbus A300'
,
110
,
'Roma-Fiumicino'
);
insert
intotvuelos values
(
'IBE 398'
,
'Boeing 707'
,
209
,
'Barcelona-El Prat'
);
commit;

Lastablassirvenparareflejarvuelosrealizadosportiposdeaviones.Sesuponequeelnmero
depasajerossiempredebesermenorquelacapacidaddelavin.

ParaesteejerciciosedebeestablecerdossesionesA1yA2paraemularelaccesoalabase
dedatosde2agencias.

Supongamosqueahorallegan2clientes,unoacadaagencia,yqueambosquierenreservar
plazaenelvuelo"IBE398".Elempleadodecadaagenciamiraaversielvueloanestlibrey
siloestindicaquehallegadounnuevopasajero,incrementandoportantoelnmerode
pasajerosenelvuelo.Suponemosademsqueenlasegundaagenciasevanrealizandolas
accionesunpocomstarde.
A1

A2

Pregunta
:escribirunaconsultaparaversi
quedansitioslibresenelvueloIBE398
(sugerencia:usartvuelosytaviones).La
consultadebemostrarporpantallala
capacidaddelavinyelnmerodeplazas
ocupadas
select.....

demomentoaqunosehacenada

Aquseestinformandoalviajerodeque
quedaunaplaza

teclearlamismaconsultaparaversi
quedanvueloslibresenelvueloIBE398

sihaysitiolibreincrementarconupdateel
nmerodeplazasenelvuelo
Pregunta
:update....(Armarsentenciapara
hacerelcambio)

Aquseestinformandoalviajerodeque
haysitioslibres

Ejecutarelmismoupdatequeenelcaso
anterior

Escribaydocumenteelanlisisconlaproblemticadeestasituacinyanexelaevidenciade
lospasosanteriores.

Examen PLSQL

6)Copiaryarreglarelsiguientecdigo:
mostrarlafechaactual

DECLARE

fechaDate
BEGIN

SelectSysdatefromdualintofecha
DBMS_OUTPUT.PUT_LINE('Hoyes'||fecha)
END

7)Ejecutarlassiguientessentenciasenelusuario
MSRESERVAS
.
--por si las tablas ya existen
drop table reservas;
drop table habitaciones;
drop table temporadas;
create table habitaciones (
piso integer NOT NULL
,
habitacion varchar
(
2
)NOT NULL,
tipo varchar
(
10
)DEFAULT
'Doble'
CONSTRAINT nn_tipo NOT NULL
CONSTRAINT ch_Tipo CHECK
(
tipo IN
(
'Individual'
,
'Doble'
,
'Suite'
)),
primary key
(
piso
,
habitacion
));
create table reservas (
piso integer,
habitacion varchar
(
2
),
fechaentrada date DEFAULT SYSDATE,
noches integer,
primary key
(
piso
,
habitacion
,
fechaentrada
),
foreign key
(
piso
,
habitacion
)references habitaciones
);
create table temporadas (
nombre varchar
(
10
)
not
null,
mesInicio integer
not
null,
diaInicio integer
not
null,
mesFin integer
not
null,
diaFin integer
not
null,
primary key
(
nombre
,
mesInicio
,
diaInicio)
);
insert
intotemporadas values
(
'Alta'
,
6
,
1
,
8
,
30
);
insert
intotemporadas values
(
'Baja'
,
1
,
1
,
5
,
31
);
insert
intotemporadas values
(
'Baja'
,
1
,
9
,
12
,
31
);

8)
Ejercicio
:Escribirunprocedimientosinparmetros
creaHabitaciones
pararellenarla
tablahabitacionesconlosdatosdelhotel.Elhoteldisponede12plantasdehabitaciones,
numeradasdela1ala12.Encadaplantadela1ala11hay25habitaciones:20dobles
(numeradasde1a20)y5sencillas(dela21ala25).Enlaplanta12slotiene8suites
numeradasdela1ala8.

9)
Escribirunafuncin
solapan
querecibecuatroparmetros:fecha1yfecha2detipodate

yn1,n2detiponumricoeindiquesilosintervalos[fecha1,fecha1+n1],[fecha2,fecha2+n2]
coinciden.Lafuncindebervalidarsiambasfechassetraslapanentresi.Sitienenalgndia
encomn,deberdevolver1y0encasocontrario.
??

10)
Ahorausarlafuncinparahacerelprocedimiento:recibircuatroparmetros:elpiso,la
habitacin,lafechayelnmerodenoches.Siesposiblehacerlareservalaapuntar.Enotro
casomostrarunmensajeindicandoquenosepuede.

11)Aadirunafuncinquecalculeelprecioparaunafechaconcretaenuntipoconcretode
habitacindelhotel.SesabequeelpreciodelahabitacinIndividuales100euros,dela
dobles120ydelaSuite200.Aestepreciosedebeaadirun30%deincrementoen
temporadaalta.

12)Escribirunafuncinquerecibacomoparmetrosuntipodehabitacin,unafechayun
nmerodenocheseindiqueporpantallaloquecostaralaestanciacompleta.Tenerencuenta
queduranteelperiododeestanciasepuedecambiardetemporadaaltaabajaoviceversa.

13)Unsistemaentiemporealdecontroldeuninvernaderovagrabandounficherologenel
queregistralasaccionesquerealiza.
Paraellodisponedeunatablaquesecreadelasiguienteforma:

generarelusuario
MSINVERNADERO
yejecutarlassiguientessentencias
drop table logt;
create table logt
( accion varchar
(
20
),
objeto varchar
(
20
), dato
decimal
);
insert
intologt values
(
'comprueba'
,
'temperatura'
,
30
);
insert
intologt values
(
'activa'
,
'refrigeracion'
,
null
);
insert
intologt values
(
'comprueba'
,
'humedad'
,
89
);
insert
intologt values
(
'desactiva'
,
'riego'
,
null
);
insert
intologt values
(
'comprueba'
,
'temperatura'
,
24
);
insert
intologt values
(
'desactiva'
,
'refrigeracion'
,
null
);
drop table error;
create table error(id integer primary key, mensaje varchar(100) );
drop table comprueba;
create table comprueba(id integer primary key, aparato varchar(30), dato decimal);
drop table activa;
create table activa(id integer primary key, aparato varchar(30));

drop table desactiva;


create table desactiva(id integer primary key, aparato varchar(30));

Enprincipioyporrazonesdeeficienciaelsistemasloutilizaelarchivolog.
Posteriormentesedebehacerunaanlisisdelarchivologcon2objetivos:
1. Comprobarsielsistematieneelfuncionamientoadecuado.Enestecasolanicaregla
quesedebecomprobaresquesiempreantesdedesactivarunaparatostetieneque
habersidoactivadoyviceversa(alprincipiosesuponentodosdesactivados).Los
posiblesaparatosson'refrigeracin'y'riego'.Cuandonosecumplaestareglael
sistemagrabarunmensajedeerrorindicativoenlatablaerror.
2. Repartirlasaccionesentre3tablas,comprueba,activaydesactiva.Dadoqueeldato
paraactivaydesactivasiempreesnullnoseincluyeenactivaniendesactiva.

UtilizandouncursorPL/SQLescribirunprocedimientoquepaselosdatosdelatablalogalas
4tablasindicadas.Laoperacindebeserreversible(sedebepoderreconstruirellogapartir
deerror,comprueba,activaydesactiva).Paraellocadatablallevaunidentificadorqueindica
dequlneadelficherologproviene.Parasaberelnmerodelneasepuedeusarunavariable
contadorenelprocedimiento,peroaquvamosautilizarensulugarelatributorownumalhacer
elselectasociadoalcursor.

Ahoraqueremoshacereltrabajoinverso:queremosreconstruirelficherologapartirde
error,comprueba,activaydesactiva.Paraellohabrquerecorrerconcursorescada
fichero,eirinsertandoenelficherolalneaadecuadaencadamomentodeformaque
semantengaelordenentrelasoperaciones.Elficherodeerrornoseutilizarporquesi
unaoperacinhaproducidounerrornodebeincluirsedevuelta.Elresultadoquedar
enunatablareclog

drop table reclog;


create table reclog
(id integer primary key
,accion varchar
(
20
),
objeto varchar
(
20
),
dato
decimal
);

Supongamosquesedecidequeelsistemaentiemporealescapazdegrabarlainformacinya
distribuidaen
error,comprueba,activaydesactiva.
Escribir:

UnafuncinsiguienteIDquedevuelveelprimeridentificadornoutilizadoan.Paraello
calcularelmximoidalmacenadoentrelas4tablasydevolveresevalor+1.Sino
hayidentificadorestodaslastablasvacasdevolver0.

UnprocedimientonuevaLineaquerecibacomoparmetrolaaccin(unacadena:
'comprueba','activa'o'desactiva'),elaparato(otracadena)yeldato(doble)einserte
unalneaenelficherocorrespondiente.Ademselprocedimientodebecomprobarsise
haproducidounerror(segnlasreglasdelpunto2)enesecasosegrabarlalneaen
elficherodeerrorynoenlosotrosficheros.Elprocedimientoutilizarlafuncinanterior

paragenerarelidentificadordecadalnea,quesernicoparatodaslastablasdela
instancia.
Secompruebaqueelclculodelsiguienteidentificadoresdemasiadolentoparaelsistemade
tiemporeal.Porellosedecideutilizarunasecuenciaquevayadndonoselsiguientevalorde
formaautomtica.UnasecuenciaesunaestructuraOraclequeseusaparagenerarvaloresy
quesealmacenacomounobjetoenlabasededatos,igualquesucedeconlasfuncioneso
procedimientos.

Examen JAVA

CompletarlasclasesTiendayArtculo,ycrearlaclaseCliente,deacuerdoconeldiagramade
clasesfacilitado(verapndice).Paraprobarelcdigounavezcompletadosefacilitaunaclase
Maindeprueba.Sitodofuncionacorrectamenteelprogramadeberagenerarlasalidaquese
describeenelapndice.

Apndice

Diagramadeclases

Maindeprueba
publicstaticvoidmain(String[]args){

//Creamostienda,llenamoselalmacenymostramoselinventario:
Tiendat=newTienda()
t.llenarAlmacen()
t.mostrarInventario()

//Creamoscliente,loregistramosenlatiendaymostramossusaldo:
Clientec=newCliente("Pedro",1000)
t.aniadirCliente(c)
c.mostrarSaldo()

//Obtenemosarraydearticulosenlatienda:
Articulo[]articulos=t.obtenerArticulos()


//Ejemplodeventadirecta:
t.vender(articulos[0],c)

//
//Algunascosasprohibidas:
//

//1.Intentamoscomprarunarticuloquenoestaenelinventario:
t.vender(newArticulo(99,"ArticuloTrampa",0),c)

//3.Unclientenoregistradointentacomprarenlatienda:
t.vender(articulos[0],newCliente("ClienteNoRegistrado"))
}

Salidaesperada

VendiendoarticuloCeroaclientePedro:

VendiendoarticuloUnoaclientePedro:

VendiendoarticuloTresaclientePedro:

Error:Articulonoexisteenlatienda.
VendiendoarticuloArticuloTrampaaclientePedro:

Error:Articulonoexisteenlatienda.
VendiendoarticuloCeroaclienteClienteNoRegistrado:

Error:Clientenoestaregistradoenlatienda.

Entrega
Lasprcticassedebenentregarenunarchivo
.zip
quedebeincluir:
un
leeme.txt
quedescribalosficherosincluidosenel
.zip
.
el
build.xml
usadoparacompilaryejecutarlaprctica(generadopornetbeansocreado
manualmente).***
una
memoria
enpdfyundirectoriojavadocconladocumentacingeneradaparacada
clase.****

Вам также может понравиться