M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T5

De wikiserver
Dreceres ràpides: navegació, cerca

T5- Solución 5: Estructures de control

1) Ejecute el comando en el archivo lab_05_01.sql para crear la tabla messages. Escriba un bloque PL/SQL para insertar números en la tabla messages.

  CREATE TABLE messages(
    results VARCHAR2(100));


a) Inserte los números del 1 al 10, excluyendo el 6 y el 8.
b) Realice la confirmación antes del final del bloque.
BEGIN
   FOR i in 1..10 LOOP
      IF i = 6 or i = 8 THEN
         null;
      ELSE
         INSERT INTO messages(results)
         VALUES (i);
      END IF;
   END LOOP;
   COMMIT;
END;
/

c) Ejecute una sentencia SELECT para verificar que el bloque PL/SQL ha funcionado.

SELECT * FROM messages;

Resultado: debe ver la siguiente salida:

Estructures de control


2) Ejecute el script lab_05_02.sql. Este script crea una tabla emp, que es una réplica de la tabla employees. Modifica la tabla emp para agregar una nueva columna, stars, de tipo de dato VARCHAR2 y tamaño 50. Cree un bloque PL/SQL que inserte un asterisco en la columna stars por cada $1000 del salario del empleado. Guarde el script como lab_05_02_soln.sql.

   CREATE TABLE employees2
   AS
   SELECT *
   FROM employees;

   ALTER TABLE employees2 
   ADD (stars VARCHAR2(50));
a) En la sección de declaraciones del bloque PL/SQL, declare una variable v_empno de tipo emp.employee_id e inicialícela en 176. Declare una variable v_asterisk de tipo emp.stars e inicialícela en NULL. Cree una variable v_sal de tipo emp.salary.
DECLARE

   v_empno employees2.employee_id%TYPE := 176;
   v_asterisk employees2.stars%TYPE := NULL;
   v_sal employees2.salary%TYPE;

b) En la sección ejecutable, escriba lógica para agregar un asterisco (*) a la cadena por cada 1.000 dólares del salario. Por ejemplo, si el empleado gana 8.000 dólares, la cadena de asteriscos debe incluir ocho asteriscos. Si el empleado gana 12.500 dólares, la cadena de asteriscos debe incluir 13 asteriscos.

BEGIN

   SELECT NVL(ROUND(salary/1000), 0) INTO v_sal
   FROM employees2 WHERE employee_id = v_empno;

   FOR i IN 1..v_sal LOOP
      v_asterisk := v_asterisk ||'*';
   END LOOP;

c) Actualice la columna stars para el empleado con la cadena de asteriscos. Realice la confirmación antes del final del bloque.

   UPDATE employees2 SET stars = v_asterisk
   WHERE employee_id = v_empno;
   COMMIT;
END;
/

d) Muestre la fila de la tabla emp para verificar que el bloque PL/SQL se ha ejecutado correctamente.

SELECT employee_id,salary, stars
FROM employees2 WHERE employee_id =176;

e) Ejecute y guarde el script como lab_05_02_soln.sql. La salida es la siguiente:

Estructures de control