Está en la página 1de 4

UNIVERSIDAD PBLICA DE EL ALTO

INGENIERIA DE SISTEMAS
NOMBRES: LUIS ALBERTO CONDORI ZAPANA
C.I. 6946755 l.p.
R.U. 13007120
FECHA: 19/05/2017 PATERNO

/*1.Elabore una funcin que permita encontrar la longitud de un nmero, de forma


recursiva. Ejem: N=124 Long=3*/

CREATE OR REPLACE FUNCTION LONG_NUM (N INT)


RETURN INT IS
BEGIN
IF N<10 THEN
RETURN 1;
ELSE
RETURN 1+LONG_NUM (N/10);
END IF;
END;
DECLARE
A INT:=&NUM;
B INT;
BEGIN
B:=LONG_NUM(A);
DBMS_OUTPUT.PUT_LINE('EL NUMERO '||A||' '||'TIENE '||B||' DE LONGITUD ');
END;
/*2.Elabore un procedimiento almacenado para insertar en la tabla
persona(cod_p,nom_p,genero) los siguientes datos:

En las posiciones impares: 1,Juan Perez,masculino

En las posiciones pares: 2,Monica Salas,femenino*/

CREATE TABLE PERSONA(


COD_P NUMBER PRIMARY KEY,
NOM_P VARCHAR(20),
GENERO VARCHAR(20));
CREATE OR REPLACE PROCEDURE INSER_PERSONA(CODIGO NUMBER,NOMBRES
VARCHAR2,GENERO_P VARCHAR2)
IS BEGIN
INSERT INTO
PERSONA(COD_P,NOM_P,GENERO)VALUES(CODIGO,NOMBRES,GENERO_P);
DBMS_OUTPUT.PUT_LINE('INSERTANDO PERSONA: '||CODIGO||' '||
NOMBRES||' '||GENERO_P);
END;
UNIVERSIDAD PBLICA DE EL ALTO

DECLARE
CANTIDAD NUMBER:=&CANTIDAD;
BEGIN
FOR C IN 1..CANTIDAD LOOP
IF MOD(C,2)=0 THEN
INSER_PERSONA(C,'MONICA SALAS','FEMENINO');
ELSE
INSER_PERSONA(C, 'JUAN PEREZ','MASCULINO');
END IF;
END LOOP;
END;

/*3. Elabore un procedimiento almacenado para desplegar el nombre de departamento;


el cdigo, nombre, salario antiguo y salario nuevo (luego de un incremento salarial del
7.2%) de los empleados.*/

CREATE OR REPLACE PROCEDURE DEPTO(


NOMBRES OUT SYS_REFCURSOR) AS
BEGIN
OPEN NOMBRES FOR
SELECT DEPARTMENT_NAME,EMPLOYEE_ID,FIRST_NAME,
SALARY SALARIO_ANTIGUO,SALARY+(SALARY*0.072) SALARIO_NUEVO
FROM EMPLOYEES JOIN DEPARTMENTS USING(DEPARTMENT_ID);
END DEPTO;
/
DECLARE
L_CURSOR SYS_REFCURSOR:=NULL;
NOMBRE_DEPTO DEPARTMENTS.DEPARTMENT_NAME%TYPE;
CODIGO EMPLOYEES.EMPLOYEE_ID%TYPE;
NOMBRE_EMP EMPLOYEES.FIRST_NAME%TYPE;
SAL_ANTIGUO EMPLOYEES.SALARY%TYPE;
SAL_NUEVO EMPLOYEES.SALARY%TYPE;
BEGIN
DEPTO(L_CURSOR);
LOOP
FETCH L_CURSOR INTO
NOMBRE_DEPTO,CODIGO,NOMBRE_EMP,SAL_ANTIGUO,SAL_NUEVO;
EXIT WHEN
L_CURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(NOMBRE_DEPTO||' '||CODIGO||' '||NOMBRE_EMP
||' '||SAL_ANTIGUO||' '||SAL_NUEVO);
END LOOP;
CLOSE L_CURSOR;
END;
UNIVERSIDAD PBLICA DE EL ALTO

/*4.Desarrolle un procedimiento almacenado para desplegar los nombres de los


empleados, departamentos y ciudades; para aquellos que fueron contratados en un da
lunes o martes de un mes cuyo nombre se ingresa por teclado.*/

CREATE OR REPLACE PROCEDURE CONTRATADOS (EMPLEADO OUT


EMPLOYEES.FIRST_NAME%TYPE,
DEPARTAMENTO OUT DEPARTMENTS.DEPARTMENT_NAME%TYPE,CIUDAD OUT
LOCATIONS.CITY%TYPE)
IS
BEGIN
SELECT FIRST_NAME ,DEPARTMENT_NAME ,CITY INTO
EMPLEADO,DEPARTAMENTO,CIUDAD
FROM EMPLOYEES JOIN DEPARTMENTS USING (DEPARTMENT_ID)
JOIN LOCATIONS USING (LOCATION_ID)
WHERE (TO_CHAR(HIRE_DATE,'FMDAY')='LUNES' OR
TO_CHAR(HIRE_DATE,'FMDAY')='MARTES') AND
FIRST_NAME =('&H');
END;

DECLARE
NOM_EMP EMPLOYEES.FIRST_NAME%TYPE;
NOM_DEP DEPARTMENTS.DEPARTMENT_NAME%TYPE;
NOM_CIUDAD LOCATIONS.CITY%TYPE;
BEGIN
CONTRATADOS(NOM_EMP,NOM_DEP,NOM_CIUDAD);
DBMS_OUTPUT.PUT_LINE(NOM_EMP||' '||
NOM_DEP||' '||NOM_CIUDAD);

END;
UNIVERSIDAD PBLICA DE EL ALTO

/*5. Elabore una aplicacin PL/SQL para desplegar los cdigos y


Nombres de los jefes seguido del de sus empleados.*/

DECLARE
CURSOR JEFES IS
SELECT DISTINCT E1.EMPLOYEE_ID, E1.FIRST_NAME
FROM EMPLOYEES E1,EMPLOYEES E2
WHERE E1.EMPLOYEE_ID = E2.MANAGER_ID
ORDER BY E1.EMPLOYEE_ID;

CURSOR EMPLEADOS IS
SELECT EMPLOYEE_ID ,FIRST_NAME,MANAGER_ID
FROM EMPLOYEES;
BEGIN
FOR C IN JEFES LOOP
DBMS_OUTPUT.PUT_LINE('JEFE '||C.EMPLOYEE_ID||' '||C.FIRST_NAME);
FOR G IN EMPLEADOS LOOP
IF (G.MANAGER_ID=C.EMPLOYEE_ID) THEN
DBMS_OUTPUT.PUT_LINE(G.EMPLOYEE_ID||' '||G.FIRST_NAME);
END IF;
END LOOP;
END LOOP;
END;

También podría gustarte