Realizar los siguientes ejercicios de PL/SQL:
-
Crea un tipo de dato compuesto que contengan los campos necesarios para guardar registros de tipo viaje (id, destino, dias, precio)**
-
Rellena dos registros con datos introducidos por el usuario.
-
Mostrar en pantalla el contenido de ambos registros.
-
Crea un tipo de dato compuesto para registros de tipo viaje y añade dos viajes. El programa tiene que comparar los precios, indicar cuál es el más barato y decir qué porcentaje de ahorro tiene respecto al otro. Por ejemplo: el viaje 1 es un 10% más económico que el viaje 2.
-
Crea un tipo de array de 20 números, que se rellenarán con valores aleatorios entre 0 y 10. Después mostrar los que tengan un valor igual o mayor a 9 e indicar el porcentaje total de números en ese rango.
-
Crea una tabla empleados(id, nombre, apellidos, departamento, salario).
-
Haz un cursor que recorra los empleados con salario mayor a 3000 y muestre su nombre, su departamento y su salario.
-
Crea un tipo de dato compuesto que contengan los campos necesarios para guardar registros de tipo viaje (id, destino, dias, precio).
DECLARE
TYPE Viaje IS RECORD (
id VARCHAR2(20),
destino VARCHAR2(100),
dias NUMBER,
precio NUMBER(10, 2)
);
viaje1 Viaje;
BEGIN
-- Asignación de valores
viaje1.id := 'V001';
viaje1.destino := 'Barcelona';
viaje1.dias := 5;
viaje1.precio := 450.75;
-- Ejemplo de uso (salida por consola)
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje1.destino ||
', Días: ' || viaje1.dias ||
', Precio: ' || viaje1.precio);
END;- Rellena dos registros con datos introducidos por el usuario.
DECLARE
TYPE Viaje IS RECORD (
id VARCHAR2(20),
destino VARCHAR2(100),
dias NUMBER,
precio NUMBER(10, 2)
);
viaje1 Viaje;
viaje2 Viaje;
BEGIN
-- Entrada de datos para el primer viaje
viaje1.id := '&ID1';
viaje1.destino := '&DESTINO1';
viaje1.dias := &DIAS1;
viaje1.precio := &PRECIO1;
-- Entrada de datos para el segundo viaje
viaje2.id := '&ID2';
viaje2.destino := '&DESTINO2';
viaje2.dias := &DIAS2;
viaje2.precio := &PRECIO2;
-- Mostrar los datos ingresados
DBMS_OUTPUT.PUT_LINE('--- VIAJE 1 ---');
DBMS_OUTPUT.PUT_LINE('ID: ' || viaje1.id);
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje1.destino);
DBMS_OUTPUT.PUT_LINE('Días: ' || viaje1.dias);
DBMS_OUTPUT.PUT_LINE('Precio: ' || viaje1.precio);
DBMS_OUTPUT.PUT_LINE('--- VIAJE 2 ---');
DBMS_OUTPUT.PUT_LINE('ID: ' || viaje2.id);
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje2.destino);
DBMS_OUTPUT.PUT_LINE('Días: ' || viaje2.dias);
DBMS_OUTPUT.PUT_LINE('Precio: ' || viaje2.precio);
END;- Mostrar en pantalla el contenido de ambos registros.
SET SERVEROUTPUT ON;
DECLARE
TYPE Viaje IS RECORD (
id VARCHAR2(20),
destino VARCHAR2(100),
dias NUMBER,
precio NUMBER(10, 2)
);
viaje1 Viaje;
viaje2 Viaje;
BEGIN
-- Entrada de datos para el primer viaje
viaje1.id := '&ID1';
viaje1.destino := '&DESTINO1';
viaje1.dias := &DIAS1;
viaje1.precio := &PRECIO1;
-- Entrada de datos para el segundo viaje
viaje2.id := '&ID2';
viaje2.destino := '&DESTINO2';
viaje2.dias := &DIAS2;
viaje2.precio := &PRECIO2;
-- Mostrar datos del primer viaje
DBMS_OUTPUT.PUT_LINE('--- VIAJE 1 ---');
DBMS_OUTPUT.PUT_LINE('ID: ' || viaje1.id);
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje1.destino);
DBMS_OUTPUT.PUT_LINE('Días: ' || viaje1.dias);
DBMS_OUTPUT.PUT_LINE('Precio: ' || viaje1.precio);
-- Mostrar datos del segundo viaje
DBMS_OUTPUT.PUT_LINE('--- VIAJE 2 ---');
DBMS_OUTPUT.PUT_LINE('ID: ' || viaje2.id);
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje2.destino);
DBMS_OUTPUT.PUT_LINE('Días: ' || viaje2.dias);
DBMS_OUTPUT.PUT_LINE('Precio: ' || viaje2.precio);
END;- Crea un tipo de dato compuesto para registros de tipo viaje y añade dos viajes. El programa tiene que comparar los precios, indicar cuál es el más barato y decir qué porcentaje de ahorro tiene respecto al otro. Por ejemplo: el viaje 1 es un 10% más económico que el viaje 2.
SET SERVEROUTPUT ON;
DECLARE
TYPE Viaje IS RECORD (
id VARCHAR2(20),
destino VARCHAR2(100),
dias NUMBER,
precio NUMBER(10, 2)
);
viaje1 Viaje;
viaje2 Viaje;
diferencia NUMBER;
porcentaje_ahorro NUMBER;
BEGIN
-- Entrada de datos para el primer viaje
viaje1.id := '&ID1';
viaje1.destino := '&DESTINO1';
viaje1.dias := &DIAS1;
viaje1.precio := &PRECIO1;
-- Entrada de datos para el segundo viaje
viaje2.id := '&ID2';
viaje2.destino := '&DESTINO2';
viaje2.dias := &DIAS2;
viaje2.precio := &PRECIO2;
-- Mostrar los datos ingresados
DBMS_OUTPUT.PUT_LINE('--- VIAJE 1 ---');
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje1.destino || ', Precio: ' || viaje1.precio);
DBMS_OUTPUT.PUT_LINE('--- VIAJE 2 ---');
DBMS_OUTPUT.PUT_LINE('Destino: ' || viaje2.destino || ', Precio: ' || viaje2.precio);
-- Comparación de precios
IF viaje1.precio < viaje2.precio THEN
diferencia := viaje2.precio - viaje1.precio;
porcentaje_ahorro := (diferencia / viaje2.precio) * 100;
DBMS_OUTPUT.PUT_LINE('El viaje 1 es más económico que el viaje 2.');
DBMS_OUTPUT.PUT_LINE('Ahorro: ' || ROUND(porcentaje_ahorro, 2) || '%');
ELSIF viaje2.precio < viaje1.precio THEN
diferencia := viaje1.precio - viaje2.precio;
porcentaje_ahorro := (diferencia / viaje1.precio) * 100;
DBMS_OUTPUT.PUT_LINE('El viaje 2 es más económico que el viaje 1.');
DBMS_OUTPUT.PUT_LINE('Ahorro: ' || ROUND(porcentaje_ahorro, 2) || '%');
ELSE
DBMS_OUTPUT.PUT_LINE('Ambos viajes tienen el mismo precio.');
END IF;
END;- Crea un tipo de array de 20 números, que se rellenarán con valores aleatorios entre 0 y 10. Después mostrar los que tengan un valor igual o mayor a 9 e indicar el porcentaje total de números en ese rango.
SET SERVEROUTPUT ON;
DECLARE
-- Tipo de array de 20 números
TYPE ArrayNumeros IS VARRAY(20) OF NUMBER;
numeros ArrayNumeros := ArrayNumeros();
contador NUMBER := 0;
i NUMBER;
porcentaje NUMBER;
BEGIN
-- Rellenar el array con números aleatorios entre 0 y 10
FOR i IN 1..20 LOOP
numeros.EXTEND;
numeros(i) := TRUNC(DBMS_RANDOM.VALUE(0, 11)); -- TRUNC para obtener entero de 0 a 10
END LOOP;
-- Mostrar los números mayores o iguales a 9
DBMS_OUTPUT.PUT_LINE('Números mayores o iguales a 9:');
FOR i IN 1..20 LOOP
IF numeros(i) >= 9 THEN
DBMS_OUTPUT.PUT_LINE('Posición ' || i || ': ' || numeros(i));
contador := contador + 1;
END IF;
END LOOP;
-- Calcular y mostrar el porcentaje
porcentaje := (contador / 20) * 100;
DBMS_OUTPUT.PUT_LINE('Total de números >= 9: ' || contador);
DBMS_OUTPUT.PUT_LINE('Porcentaje: ' || ROUND(porcentaje, 2) || '%');
END;- Crea una tabla empleados(id, nombre, apellidos, departamento, salario).
CREATE TABLE empleados (
id NUMBER PRIMARY KEY,
nombre VARCHAR2(50),
apellidos VARCHAR2(100),
departamento VARCHAR2(50),
salario NUMBER(10, 2)
);
- Haz un cursor que recorra los empleados con salario mayor a 3000 y muestre su nombre, su departamento y su salario.
SET SERVEROUTPUT ON;
DECLARE
-- Definición del cursor
SELECT nombre, departamento, salario
FROM empleados
WHERE salario > 3000;
-- Variables para almacenar los valores del cursor
v_nombre empleados.nombre%TYPE;
v_departamento empleados.departamento%TYPE;
v_salario empleados.salario%TYPE;
BEGIN
OPEN empleados_cursor;
LOOP
FETCH empleados_cursor INTO v_nombre, v_departamento, v_salario;
EXIT WHEN empleados_cursor%NOTFOUND;
-- Mostrar la información
DBMS_OUTPUT.PUT_LINE('Nombre: ' || v_nombre ||
', Departamento: ' || v_departamento ||
', Salario: ' || v_salario);
END LOOP;
CLOSE empleados_cursor;
END;