Revisión Evaluación 03
1 Evaluación 03-A
1.1 Sección 1: Selección Múltiple (30 puntos)
Selecciona la alternativa correcta para cada pregunta.
¿Qué significa PL/SQL en Oracle?
- Procedural Language/Structured Query Language
- Programming Logic/SQL
- Program Logic/Structured Query Language
- Procedural Logic/SQL
¿Qué tipo de dato se usa en PL/SQL para manejar cadenas de caracteres?
- STRING
- TEXT
- VARCHAR2
- CHAR
¿Cuál es la sintaxis correcta para declarar una variable en PL/SQL?
- DECLARE variable_name : data_type;
- DECLARE variable_name data_type;
- variable_name data_type := value;
- DECLARE variable_name data_type := value;
¿Cuál es la diferencia entre un procedimiento almacenado y una función en PL/SQL?
- Ambos devuelven un valor
- Solo los procedimientos devuelven valores
- Solo las funciones devuelven valores
- Ambos son iguales
¿Cuál de las siguientes operaciones se puede realizar dentro de un bloque PL/SQL?
- SELECT INTO
- GROUP BY
- ORDER BY
- DROP TABLE
¿Cómo se maneja una excepción cuando ocurre un error en PL/SQL?
- TRY-CATCH
- BEGIN-END
- WHEN-THEN
- EXCEPTION-WHEN
¿Cuál es la función PL/SQL utilizada para calcular el promedio de una columna en una tabla?
- MAX
- MIN
- SUM
- AVG
¿Cuál de las siguientes es una ventaja de usar PL/SQL sobre SQL puro?
- Menor control de flujo
- Permite la programación procedural
- Menor flexibilidad
- No es compatible con bases de datos relacionales
¿Cuál es la palabra clave para crear un procedimiento almacenado en PL/SQL?
- FUNCTION
- PROCEDURE
- DECLARE
- BEGIN
¿Qué comando se utiliza para imprimir texto en PL/SQL?
- DBMS_OUTPUT.PUT_LINE
- ECHO
- OUTPUT
¿Cuál es la estructura correcta para manejar errores en PL/SQL?
- BEGIN … END
- TRY … CATCH
- EXCEPTION … WHEN
- IF … ELSE
¿Cómo se declara una variable de tipo numérico en PL/SQL?
- NUMBER
- INTEGER
- FLOAT
- DECIMAL
¿Qué hace el siguiente comando SELECT INTO en PL/SQL?
- Inserta valores en una tabla
- Copia datos de una tabla a otra
- Almacena el resultado de una consulta en una variable
- Crea una nueva tabla
¿Cómo se inicia un bloque PL/SQL?
- BEGIN
- DECLARE
- START
- INIT
¿Qué se usa en PL/SQL para ejecutar un bloque repetidamente?
- WHILE
- LOOP
- FOR
- Todas las anteriores
1.2 Sección 2: Ejercicios Prácticos (75 puntos)
Ejercicio 2
Verificar Si un Número es Par o Impar (25 puntos)
Crea un bloque PL/SQL que reciba un número y determine si es par o impar. Si el número es par, debe imprimir “Es par”, de lo contrario, “Es impar”.
Ejemplo de Entrada:
DECLARE
NUMBER := 8;
v_numero BEGIN
-- bloque para verificar si es par o impar
END;
Ejemplo de Salida Esperada:
Es par
Solución
DECLARE
NUMBER := 8;
v_numero BEGIN
IF MOD(v_numero, 2) = 0 THEN
'Es par');
DBMS_OUTPUT.PUT_LINE(ELSE
'Es impar');
DBMS_OUTPUT.PUT_LINE(END IF;
END;
Ejercicio 3
Actualizar el Precio de un Producto (25 puntos)
Crea un procedimiento almacenado llamado sp_ActualizarPrecioProducto que reciba el ID del producto y un porcentaje de incremento, y actualice el precio del producto incrementándolo en ese porcentaje. Imprime el nuevo precio del producto.
Ejemplo de Entrada:
CALL sp_ActualizarPrecioProducto(101, 10);
Ejemplo de Salida Esperada:
El nuevo precio del producto con ID 101 es: 550
Solución
CREATE OR REPLACE PROCEDURE sp_ActualizarPrecioProducto(
IN NUMBER,
p_ProductoID IN NUMBER
p_incremento_porcentaje IS
) NUMBER;
v_precio_actual NUMBER;
v_nuevo_precio BEGIN
-- Obtener el precio actual del producto
SELECT precio INTO v_precio_actual
FROM Productos
WHERE ProductoID = p_ProductoID;
-- Calcular el nuevo precio
:= v_precio_actual + (v_precio_actual * p_incremento_porcentaje / 100);
v_nuevo_precio
-- Actualizar el precio del producto
UPDATE Productos
SET Precio = v_nuevo_precio
WHERE ProductoID = p_ProductoID;
-- Imprimir el nuevo precio del producto
'El nuevo precio del producto con ID ' || p_ProductoID || ' es: ' || v_nuevo_precio);
DBMS_OUTPUT.PUT_LINE(
END;
2 Evaluación 03-B
2.1 Sección 1: Selección Múltiple (30 puntos)
¿Qué palabra clave en PL/SQL se usa para declarar un bloque anónimo?
- DECLARE
- START
- INIT
- BEGIN
¿Qué operador en PL/SQL se usa para verificar si un valor existe en un conjunto de valores?
- EXISTS
- IN
- BETWEEN
- LIKE
¿Cuál de los siguientes es un tipo de bucle en PL/SQL?
- WHILE
- FOR
- LOOP
- Todas las anteriores
¿Qué instrucción se utiliza para salir de un bucle en PL/SQL?
- EXIT
- LEAVE
- BREAK
- STOP
¿Cuál de las siguientes palabras clave se usa para manejar excepciones en PL/SQL?
- EXCEPTION
- WHEN
- TRY
- CATCH
¿Cuál es la función PL/SQL que devuelve el número de filas en una consulta?
- SUM
- COUNT
- AVG
- MIN
¿Cuál de las siguientes es la función correcta para convertir un valor numérico a una cadena en PL/SQL?
- TO_STRING
- TO_NUMBER
- TO_CHAR
- TO_DATE
¿Cuál es la diferencia principal entre IF…THEN y CASE en PL/SQL?
- CASE permite múltiples condiciones, IF solo una
- CASE es más rápido que IF…THEN
- CASE no soporta valores numéricos
- IF no puede manejar varios casos
¿Qué tipo de dato se utiliza en PL/SQL para almacenar fechas?
- DATETIME
- TIME
- DATE
- TIMESTAMP
¿Cuál es la palabra clave para crear una función en PL/SQL?
- FUNCTION
- PROCEDURE
- DECLARE
- EXECUTE
¿Qué bloque en PL/SQL contiene el código que se ejecuta cuando ocurre un error?
- BEGIN
- EXCEPTION
- TRY
- ERROR
¿Cuál es el operador correcto para concatenar cadenas en PL/SQL?
- +
- ||
- CONCAT
- &
¿Qué se utiliza para devolver un valor desde una función en PL/SQL?
- OUTPUT
- RETURN
- SELECT
- SEND
¿Qué bloque es opcional en un bloque PL/SQL?
- BEGIN
- EXCEPTION
- END
- DECLARE
¿Cuál de las siguientes es una declaración válida para manejar excepciones en PL/SQL?
- WHEN OTHERS THEN
- IF ERROR THEN
- TRY CATCH
- CATCH ERROR THEN
2.2 Sección 2: Ejercicios Prácticos (75 puntos)
Ejercicio 1
Calcular el Salario Anual (25 puntos)
Crea un procedimiento almacenado llamado sp_CalcularSalarioAnual que reciba el salario mensual de un empleado y calcule su salario anual (salario mensual * 12). El procedimiento debe imprimir el salario anual.
Ejemplo de Entrada:
CALL sp_CalcularSalarioAnual(1500);
Ejemplo de Salida Esperada:
El salario anual es: 18000
Solución
CREATE OR REPLACE PROCEDURE sp_CalcularSalarioAnual(
IN NUMBER
p_salario_mensual IS
) NUMBER;
v_salario_anual BEGIN
-- Calcular el salario anual
:= p_salario_mensual * 12;
v_salario_anual
-- Imprimir el salario anual
'El salario anual es: ' || v_salario_anual);
DBMS_OUTPUT.PUT_LINE(END;
Ejercicio 2
Verificar Si un Número es Par o Impar (25 puntos)
Crea un bloque PL/SQL que reciba un número y determine si es par o impar. Si el número es par, debe imprimir “Es par”, de lo contrario, “Es impar”.
Ejemplo de Entrada:
DECLARE
NUMBER := 8;
v_numero BEGIN
-- bloque para verificar si es par o impar
END;
Ejemplo de Salida Esperada:
Es par
Solución
DECLARE
NUMBER := 8;
v_numero BEGIN
IF MOD(v_numero, 2) = 0 THEN
'Es par');
DBMS_OUTPUT.PUT_LINE(ELSE
'Es impar');
DBMS_OUTPUT.PUT_LINE(END IF;
END;
Ejercicio 3
Actualizar el Stock de un Producto (25 puntos)
Crea un procedimiento almacenado llamado sp_ActualizarStockProducto que reciba el ID del producto y una cantidad vendida. Debe actualizar el stock del producto restando la cantidad vendida e imprimir el stock actualizado.
Ejemplo de Entrada:
CALL sp_ActualizarStockProducto(101, 3);
Ejemplo de Salida Esperada:
El stock del producto con ID 101 es: 7
Solución
CREATE OR REPLACE PROCEDURE sp_ActualizarStockProducto(
IN NUMBER,
p_ProductoID IN NUMBER
p_cantidad_vendida
)IS
NUMBER;
v_stock_actual BEGIN
-- Obtener el stock actual del producto
SELECT stock INTO v_stock_actual
FROM Productos
WHERE ProductoID = p_ProductoID;
-- Actualizar el stock restando la cantidad vendida
:= v_stock_actual - p_cantidad_vendida;
v_stock_actual
-- Actualizar el registro en la tabla
UPDATE Productos
SET stock = v_stock_actual
WHERE ProductoID = p_ProductoID;
-- Imprimir el stock actualizado
'El stock del producto con ID ' || p_ProductoID || ' es: ' || v_stock_actual);
DBMS_OUTPUT.PUT_LINE(END;