Skip to content

Instantly share code, notes, and snippets.

@leopic
Created October 19, 2014 01:32
Show Gist options
  • Save leopic/0eb8bfd4ee4a63ed2544 to your computer and use it in GitHub Desktop.
Save leopic/0eb8bfd4ee4a63ed2544 to your computer and use it in GitHub Desktop.
-- Ejercicio 3
-- Leo Picado
SET SERVEROUTPUT ON;
SET VERIFY OFF;
-- Boostrapping
DROP TABLE EMPLEA_PRUEBA;
CREATE TABLE EMPLEA_PRUEBA AS (
SELECT num_emp, nombre||' '||apellido as nombre_apellido, salario, num_dept, cod_puesto, jefe
FROM empleados
WHERE JEFE IS NOT NULL
);
ALTER TABLE EMPLEA_PRUEBA ADD CONSTRAINT fk_empleado_jefe FOREIGN KEY(JEFE) REFERENCES EMPLEADOS(NUM_EMP);
ALTER TABLE EMPLEA_PRUEBA ADD RANK varchar2(20);
-- End bootstrapping
DECLARE
-- variables
ranking EMPLEA_PRUEBA.RANK%TYPE;
pajar EMPLEA_PRUEBA.NOMBRE_APELLIDO%TYPE;
id_empleado EMPLEA_PRUEBA.NUM_EMP%TYPE := 0;
total_empleados number(3);
BEGIN
-- sentencias
-- Empleados con una 'w' en su nombre:
SELECT COUNT(*) INTO total_empleados
FROM EMPLEA_PRUEBA
WHERE REGEXP_SUBSTR(lower(NOMBRE_APELLIDO), '\w+', 1, 1) LIKE '%w%';
FOR j in 1..total_empleados LOOP
-- Obteniendo el ID de cada empleado
SELECT NUM_EMP INTO id_empleado
FROM EMPLEA_PRUEBA
WHERE REGEXP_SUBSTR(lower(NOMBRE_APELLIDO), '\w+', 1, 1) LIKE '%w%'
AND ROWNUM <= j OFFSET (j - 1) ROWS;
-- Obteniendo el nombre/apellido/puesto
SELECT lower(NOMBRE_APELLIDO||COD_PUESTO) INTO pajar
FROM EMPLEA_PRUEBA
WHERE NUM_EMP = id_empleado;
-- buscando las vocales
FOR i IN 1..length(pajar) LOOP
IF substr(pajar, i, 1) IN('a', 'e', 'i', 'o', 'u') THEN
ranking := ranking||'*';
END IF;
END LOOP;
-- actualizando la tabla
UPDATE EMPLEA_PRUEBA
SET RANK = ranking
WHERE NUM_EMP = id_empleado;
-- Rank tiene que volver a cero para no acumularlos todos
ranking := '';
END LOOP;
DBMS_OUTPUT.put_line('Se cambiaron un total de: '||total_empleados||' empleados.');
END;
/
@pfallasro
Copy link

Le quedo guapo 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment