Prueba inicial
Sobre Oracle
Ejercicio 1
Crear la tabla Alumnos de la siguiente manera:
- DNI: formato 99.999.999-X
- Nombre: inicial mayúsculas
- Apellido: inicial mayúsculas
- Correo: formato xxxx@xxxx.com o xxxx@xxxx.es
Añadir registros
CREATE TABLE Alumnos (
DNI char(12),
Nombre varchar2(50),
Apellido varchar2(50),
Correo varchar2(50),
CHECK (REGEXP_LIKE(DNI,'^[0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]-[A-Z]$')),
CHECK (REGEXP_LIKE(Nombre,'^[A-Z][a-z]*$')),
CHECK (REGEXP_LIKE(Apellido,'^[A-Z][a-z]*$')),
CHECK (REGEXP_LIKE(Correo,'*@*.com') OR REGEXP_LIKE(Correo,'*@*.es')),
PRIMARY KEY(DNI)
);
INSERT INTO Alumnos (DNI, Nombre, Apellido, Correo)
VALUES ('12.345.678-A', 'Paco', 'Ramos', 'paco@paco.es');
INSERT INTO Alumnos (DNI, Nombre, Apellido, Correo)
VALUES ('12.345.678-B', 'Jose', 'Josefez', 'jose@jose.com');
Ejercicio 2
Mostrar los alumnos cuyo apellido empieza por R y su correo está en un dominio .es
Ejercicio 3
Crear la tabla Notas de la siguiente manera:
- DNI: clave ajena de Alumnos
- Módulo: ABD, SAD, Servicios o Sistemas
- Nota: 0 al 10
Añadir registros
CREATE TABLE Notas (
DNI char(12),
Modulo varchar2(50),
Nota NUMBER(2),
CONSTRAINT fk_DNI
FOREIGN KEY (DNI)
REFERENCES Alumnos(DNI),
CHECK (Modulo IN ('ABD','SAD','Servicios','Sistemas')),
CHECK (Nota BETWEEN 0 AND 10)
);
INSERT INTO Notas (DNI, Modulo, Nota)
VALUES ('12.345.678-A', 'ABD', '8');
INSERT INTO Notas (DNI, Modulo, Nota)
VALUES ('12.345.678-A', 'SAD', '9');
INSERT INTO Notas (DNI, Modulo, Nota)
VALUES ('12.345.678-A', 'Servicios', '10');
INSERT INTO Notas (DNI, Modulo, Nota)
VALUES ('12.345.678-A', 'Sistemas', '10');
INSERT INTO Notas (DNI, Modulo, Nota)
VALUES ('12.345.678-B', 'Servicios', '5');
Ejercicio 4
Mostrar los alumnos con más de 3 notas superiores a 7
Ejercicio 5
Hacer un procedimiento PL/SQL que:
- Reciba un DNI y muestre por pantalla todas sus notas
- Tenga las excepciones: Alumno Inexistente, Alumno sin Notas
Añado el procedimiento:
CREATE OR REPLACE PROCEDURE NOTAS_POR_DNI
(
v_dni IN char
) AS
CURSOR c_notas IS
SELECT *
FROM Notas
WHERE DNI = v_dni;
v_reg_cursor c_notas%ROWTYPE;
v_contador1 number(1);
v_contador2 number(1);
BEGIN
SELECT count(*)
INTO v_contador1
FROM Alumnos
WHERE DNI = v_dni;
SELECT count(*)
INTO v_contador2
FROM Notas
WHERE DNI = v_dni;
IF v_contador1 = 0 THEN
RAISE_APPLICATION_ERROR(-20000, 'No existe un alumno con DNI ' || v_dni);
ELSIF v_contador2 = 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'No existen notas para el alumno con DNI ' || v_dni);
ELSE
OPEN c_notas;
FETCH c_notas INTO v_reg_cursor;
WHILE c_notas%FOUND LOOP
DBMS_OUTPUT.PUT_LINE( 'El alumno con DNI ' || v_reg_cursor.DNI || ' ha sacado una nota de ' || v_reg_cursor.Nota || ' en el módulo ' || v_reg_cursor.Modulo);
FETCH c_notas INTO v_reg_cursor;
END LOOP;
CLOSE c_notas;
END IF;
END NOTAS_POR_DNI;
/
Activo las salidas de mensajes:
Para ejecutar el procedimiento pidiendo el DNI tengo que ejecutar lo siguiente:
Notas de un alumno existente:
Notas de un alumno inexistente:
Alumno sin notas:
Sobre MongoDB
Ejercicio 6
Crear la colección
productos
con varios documentos que contengan:
- Nombre
- Precio
Creo la colección:
La muestro:
Inserto los documentos:
Los muestro:
Ejercicio 7
Muestra los documentos correspondientes a productos cuyo precio sea superior a 20