Skip to content

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)
);

tabla alumnos

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');

registros alumnos

Ejercicio 2

Mostrar los alumnos cuyo apellido empieza por R y su correo está en un dominio .es

SELECT *
FROM Alumnos
WHERE Apellido LIKE 'R%' AND Correo LIKE '%.es';

consulta alumnos

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)
);

tabla notas

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');

registros notas

Ejercicio 4

Mostrar los alumnos con más de 3 notas superiores a 7

SELECT DNI, COUNT(*) "Notas > 7"
FROM Notas
WHERE Nota > 7
GROUP BY DNI
HAVING COUNT(*) > 3;

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;
/

procedimiento creado

Activo las salidas de mensajes:

SET SERVEROUTPUT ON

Para ejecutar el procedimiento pidiendo el DNI tengo que ejecutar lo siguiente:

BEGIN
    NOTAS_POR_DNI('&dni');
END;
/

Notas de un alumno existente:

notas A

Notas de un alumno inexistente:

notas inexistente

Alumno sin notas:

sin notas

Sobre MongoDB

Ejercicio 6

Crear la colección productos con varios documentos que contengan:

  • Nombre
  • Precio

Creo la colección:

db.createCollection("productos")

creo coleccion

La muestro:

muestro coleccion

Inserto los documentos:

db.productos.insertMany( [
  { nombre: "Tomate", precio: 5 },
  { nombre: "Yogurt", precio: 21 }
] )

inserto documentos

Los muestro:

muestro documentos

Ejercicio 7

Muestra los documentos correspondientes a productos cuyo precio sea superior a 20

db.productos.find(
  { precio: {$gt:20} }
)

productos > 20