Funciones SQL y PL/SQL en Oracle: Ejercicios Prácticos con Tablas Empleado y Préstamo

Informática6,59 KB

Creación de Tablas en Oracle

Tabla Empleado

Se define la tabla Empleado con su clave primaria sobre el campo rut:

CREATE TABLE Empleado (
  rut VARCHAR2(15),
  nombre VARCHAR2(20),
  direccion VARCHAR2(30),
  sueldo NUMBER,
  tipo VARCHAR2(15),
  profesion VARCHAR(15),
  comuna VARCHAR2(15),
  fecha_contrato DATE,
  CONSTRAINT Empleado_rut_pk PRIMARY KEY(rut)
);

Tabla Prestamo

La tabla Prestamo incluye una clave foránea que referencia a Empleado(rut):

CREATE TABLE Prestamo (
  codigo VARCHAR(30),
  libro VARCHAR2(50),
  categoria VARCHAR2(20),
  fecha_prestamo DATE,
  rut VARCHAR2(15),
  CONSTRAINT Prestamo_codigo_pk PRIMARY KEY(codigo),
  CONSTRAINT Empleado_Prestamo_rut_fk FOREIGN KEY(rut) REFERENCES Empleado(rut)
);

Inserción de Datos

Datos de la tabla Empleado

INSERT INTO Empleado VALUES('12345-7','miguel castro','las margaritas 1322',267900,'ventas','vendedor','lo prado',TO_DATE('22-12-2000','dd-mm-yyyy'));
INSERT INTO Empleado VALUES('10500-4','pablo paredes','la esperanza 764',367800,'finanzas','contador','santiago',TO_DATE('10-03-2006','dd-mm-yyyy'));
INSERT INTO Empleado VALUES('13450-5','daniela vera','miguel carrera 1020',523000,'informatico','programador','maipu',TO_DATE('15-05-2008','dd-mm-yyyy'));
INSERT INTO Empleado VALUES('12345-8','luis lopez','los trabajadores 345',309800,'ventas','vendedor','maipu',TO_DATE('29-09-2005','dd-mm-yyyy'));
INSERT INTO Empleado VALUES('14356-3','marcela cubillos','san pablo 7866',501000,'informatico','programador','santiago',TO_DATE('19-04-2006','dd-mm-yyyy'));
INSERT INTO Empleado VALUES('15990-1','camila rojas','maipu 134',289000,'ventas','vendedor','lo prado',TO_DATE('14-07-2010','dd-mm-yyyy'));

Datos de la tabla Prestamo

INSERT INTO Prestamo VALUES(709,'cronicas de narnia','fantasia',TO_DATE('20-12-2010','dd-mm-yyyy'),'12345-7');
INSERT INTO Prestamo VALUES(718,'harry potter 5','fantasia',TO_DATE('21-03-2011','dd-mm-yyyy'),'12345-8');
INSERT INTO Prestamo VALUES(800,'el ojo de la luna','drama',TO_DATE('07-04-2011','dd-mm-yyyy'),'13450-5');
INSERT INTO Prestamo VALUES(820,'cronicas de narnia','fantasia',TO_DATE('14-05-2011','dd-mm-yyyy'),'10500-4');
INSERT INTO Prestamo VALUES(840,'comer,rezar,amar','drama',TO_DATE('15-12-2010','dd-mm-yyyy'),'12345-7');
INSERT INTO Prestamo VALUES(900,'harry potter 5','fantasia',TO_DATE('29-01-2011','dd-mm-yyyy'),'10500-4');
INSERT INTO Prestamo VALUES(910,'cronicas de narnia','fantasia',TO_DATE('11-12-2010','dd-mm-yyyy'),'15990-1');

Ejercicios PL/SQL

Ejercicio 1: Conversión de fecha a cadena

DECLARE
  fecha VARCHAR(15);
BEGIN
  SELECT TO_CHAR(fecha_prestamo,'dd-mm-yyyy') INTO fecha
  FROM Prestamo, Empleado
  WHERE Empleado.rut = Prestamo.rut AND Empleado.nombre = 'daniela vera';
  BEGIN
    DBMS_OUTPUT.PUT_LINE('fecha cambiada de tipo: ' || fecha);
  END;
END;

Ejercicio 2: Longitud de una cadena

DECLARE
  contar NUMBER;
  dire VARCHAR(30);
BEGIN
  SELECT LENGTH(direccion), Empleado.direccion INTO contar, dire
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut AND Prestamo.libro = 'comer,rezar,amar';
  BEGIN
    DBMS_OUTPUT.PUT_LINE('la cantidad de caracteres es: ' || contar);
    DBMS_OUTPUT.PUT_LINE('la dirección es: ' || dire);
  END;
END;

Ejercicio 3: Conversión de cadena a número

DECLARE
  numero NUMBER;
  codi VARCHAR2(30);
BEGIN
  SELECT TO_NUMBER(codigo), Prestamo.codigo INTO numero, codi
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut AND Empleado.sueldo > 270000 AND Empleado.comuna = 'lo prado';
  DBMS_OUTPUT.PUT_LINE('código cambiado de tipo numérico: ' || numero);
  DBMS_OUTPUT.PUT_LINE('el código es: ' || codi);
END;

Ejercicio 4: Conversión a mayúsculas

DECLARE
  mayuscula VARCHAR(50);
  lib VARCHAR2(50);
BEGIN
  SELECT UPPER(libro), Prestamo.libro INTO mayuscula, lib
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut
    AND Prestamo.categoria = 'fantasia'
    AND Empleado.fecha_contrato = TO_DATE('29-09-2005','dd-mm-yyyy');
  DBMS_OUTPUT.PUT_LINE('en mayúscula: ' || mayuscula);
  DBMS_OUTPUT.PUT_LINE('el libro es: ' || lib);
END;

Ejercicio 5: Extracción de subcadenas

DECLARE
  cadena VARCHAR2(50);
  dire VARCHAR(50);
BEGIN
  SELECT SUBSTR(direccion,3,9), Empleado.direccion INTO cadena, dire
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut
    AND Prestamo.fecha_prestamo = TO_DATE('29-01-2011','dd-mm-yyyy');
  BEGIN
    DBMS_OUTPUT.PUT_LINE('los caracteres son: ' || cadena);
    DBMS_OUTPUT.PUT_LINE('la dirección es: ' || dire);
  END;
END;

Ejercicio 6: Suma de meses a una fecha

DECLARE
  incre DATE;
  fecha DATE;
BEGIN
  SELECT ADD_MONTHS(fecha_prestamo,6), Prestamo.fecha_prestamo INTO incre, fecha
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut AND Empleado.nombre = 'luis lopez';
  BEGIN
    DBMS_OUTPUT.PUT_LINE('la fecha después de 6 meses: ' || incre);
    DBMS_OUTPUT.PUT_LINE('la fecha es: ' || fecha);
  END;
END;

Ejercicio 7: Diferencia en meses entre fechas

DECLARE
  diferencia NUMBER;
BEGIN
  SELECT MONTHS_BETWEEN(fecha_prestamo, TO_DATE('24-08-2011','dd-mm-yyyy'))
  INTO diferencia
  FROM Prestamo
  WHERE libro = 'el ojo de la luna';
  DBMS_OUTPUT.PUT_LINE('la diferencia de meses es: ' || diferencia);
END;

Ejercicio 8: Consulta con múltiples variables

DECLARE
  mayuscula VARCHAR(15);
  tip VARCHAR2(15);
  cate VARCHAR2(20);
BEGIN
  SELECT UPPER(profesion), Empleado.tipo, Prestamo.categoria INTO mayuscula, tip, cate
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut AND Prestamo.codigo = '820';
  DBMS_OUTPUT.PUT_LINE('en mayúscula es: ' || mayuscula);
  DBMS_OUTPUT.PUT_LINE('el tipo es: ' || tip);
  DBMS_OUTPUT.PUT_LINE('la categoría es: ' || cate);
END;

Ejercicio 9: Combinación de funciones

DECLARE
  codi NUMBER;
  profe VARCHAR2(15);
  lib NUMBER;
  suel NUMBER;
BEGIN
  SELECT TO_NUMBER(codigo), UPPER(profesion), LENGTH(libro), Empleado.sueldo
  INTO codi, profe, lib, suel
  FROM Empleado, Prestamo
  WHERE Empleado.rut = Prestamo.rut AND Empleado.nombre = 'camila rojas';
  DBMS_OUTPUT.PUT_LINE('el código cambiado a número: ' || codi);
  DBMS_OUTPUT.PUT_LINE('la profesión en mayúscula: ' || profe);
  DBMS_OUTPUT.PUT_LINE('la cantidad de caracteres de libro: ' || lib);
  DBMS_OUTPUT.PUT_LINE('el sueldo es: ' || suel);
END;

Descargar

PDF Word HTML