martes, 20 de julio de 2010

Trabajo Jose Zambrano_ 7C

ESCUELA POLITECNICA DEL EJÉRCITO

NOMBRE: José David Zambrano Jara

Curso: Sistemas 7C

APLICACIÓN DE BASE DE DATOS

1) ESCRIBIR UN BLOQUE PLSQL QUE CALCULE LA MEDIA DE DOS NÚMEROS DADOS POR EL USUARIO.

DECLARE

resul NUMBER;

val1 NUMBER:=&num1;

val2 NUMBER :=&num2;

BEGIN

resul:=(val1+val2)/2;

DBMS_OUTPUT.PUT_LINE('el resultado es: '|| resul);

END;

2) ESCRIBIR UN BLOQUE PLSQL QUE PIDA DOS IDENTIFICADORES DE PROFESORES Y DETERMINE CUAL DE LOS DOS ESTA MAS CERCA DE CERO O SI SON IGUALES

DECLARE

id1 NUMBER:=&ide1;

id2 NUMBER :=&ide2;

BEGIN

IF id1 <>

DBMS_OUTPUT.PUT_LINE('LA IDENTIFICACION DEL PRIMER PROFESOR ES MAS CERCANA A 0 CON UN VALOR DE: ' || id1);

ELSIF id1 > id2 THEN

DBMS_OUTPUT.PUT_LINE('LA IDENTIFICACION DEL SEGUNDO PROFESOR ES MAS CERCANA A 0 CON UN VALOR DE: ' || id2);

ELSIF id1 = id2 THEN

DBMS_OUTPUT.PUT_LINE('LA IDENTIFICACION DEL SEGUNDO PROFESOR IGUAL A LA DEL PRIMER PROFESOR CON VALORES DE: ' || id1);

ELSIF id1 =0 THEN

DBMS_OUTPUT.PUT_LINE('LA IDENTIFICACION DEL PRIMER PROFESOR ES 0');

ELSIF id2 =0 THEN

DBMS_OUTPUT.PUT_LINE('LA IDENTIFICACION DEL SEGUNDO PROFESOR ES 0');

ELSE

DBMS_OUTPUT.PUT_LINE('NUMERO RARO');

END IF;

END;

3) ESCRIBIR UN BLOQUE PLSQL QUE CONVIERTA UNA DETERMINADA CANTIDAD EXPRESADA EN SEGUNDO A HORAS, MINUTOS Y SEGUNDOS.

Declare

Num_Segundos Number(5,0) :=&seg;

horas Number(5,0);

auxhoramin number(5,0);

minutos Number(5,0);

auxminseg number(5,0);

segundos Number(5,0);

begin

if (Num_Segundos<=60) then

DBMS_OUTPUT.PUT_LINE(Num_Segundos||’ segundos son: 0 hora(s) 0 minuto(s) ’||Num_Segundos||’ segundos’);

end if;

if(Num_Segundos>60) then

horas:= Num_Segundos/3600;

if (horas<1)>

End if;

auxhoramin:=Num_Segundos-(horas*3600);

minutos:=auxhoramin/60;

if (minutos<1)>

End if;

auxminseg:=Num_Segundos-(horas*3600)-(minutos*60);

segundos:=auxminseg;

DBMS_OUTPUT.PUT_LINE(Num_Segundos||’ segundos son: ’||horas||’ hora(s) ’||minutos||’minuto(s) ’||segundos||’ segundos’);

End if;

End;

4) MOSTRAR EL CONTENIDO DE UNA VARIABLE QUE CONTENGA LA CAPACIDAD TOTAL DE TODAS LAS AULAS DEL EDIFICIO DE INFORMÁTICA.

Declare

v_capacidad aulas.numpersonas%TYPE;

Begin

Select sum(numpersonas) into v_capacidad

From aulas where edificio like ‘INFOR%’;

DBMS_OUTPUT.PUT_LINE(‘La capacidad total es: ’||v_capacidad||’ personas’);

End;

EXAMEN

EJERCICIO Nº 1

DECLARE

NUMERO NUMBER:=0;

CORREO varchar2(100);

COR varchar2(100):='&C';

BEGIN

NUMERO:=INSTR(COR,'@',1,1);

CORREO:=SUBSTR(COR,1,NUMERO-1);

DBMS_OUTPUT.PUT_LINE('EL CORREO ES:' || CORREO);

END;

EJERCICIO Nº 2

CREATE TABLE TOP_DOGS (NAME VARCHAR2(25), SALARY NUMBER(11,2), COMMISION NUMBER(2,2), REGION VARCHAR2(30));

DECLARE

NUM NUMBER:=&N;

NOMBRE EMPLOYEES.FIRST_NAME%TYPE;

SALARIO EMPLOYEES.SALARY%TYPE;

COMMISION EMPLOYEES.COMMISSION_PCT%TYPE;

REGION REGIONS.REGION_NAME%TYPE;

CURSOR INSERTAR IS

SELECT E.FIRST_NAME, E.SALARY, E.COMMISSION_PCT, R.REGION_NAME

FROM EMPLOYEES E, JOBS J, DEPARTMENTS D, LOCATIONS L, COUNTRIES C, REGIONS R

WHERE R.REGION_ID=C.REGION_ID AND

C.COUNTRY_ID=L.COUNTRY_ID AND

L.LOCATION_ID=D.LOCATION_ID AND

D.DEPARTMENT_ID=E.DEPARTMENT_ID AND J.JOB_ID=E.JOB_ID AND E.COMMISSION_PCT IS NOT NULL;

BEGIN

DELETE FROM TOP_DOGS;

COMMIT;

OPEN INSERTAR;

FETCH INSERTAR INTO NOMBRE, SALARIO, COMMISION, REGION;

WHILE INSERTAR%ROWCOUNT <= NUM AND INSERTAR%FOUND LOOP

INSERT INTO TOP_DOGS(NAME, SALARY, COMMISION, REGION) VALUES(NOMBRE,SALARIO,COMMISION,REGION);

FETCH INSERTAR INTO NOMBRE,SALARIO,COMMISION,REGION;

END LOOP;

CLOSE INSERTAR;

COMMIT;

END;

TALLERES 2º PARTE

EJERCICIO Nº 1 - VARIABLES TIPO REGISTRO

set serveroutput on;

DECLARE

CURSOR cursordep IS

SELECT d.department_name, SUM(e.salary)

FROM DEPARTMENTS d

JOIN EMPLOYEES e USING (department_id)

GROUP BY d.department_name;

v_dep departments.department_name%TYPE;

v_sal employees.salary%TYPE;

BEGIN

OPEN cursordep;

LOOP

FETCH cursordep INTO v_dep,

v_sal;

EXIT WHEN cursordep%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(v_dep || ',' ||

v_sal);

END LOOP;

CLOSE cursordep;

END;

EJERCICIO Nº 2 - VARIABLES NORMALES

set serveroutput on;

DECLARE

CURSOR cDepartamento IS

select department_id, department_name, manager_id, location_id, city, street_address, state_province

from

departments join locations using (location_id);

rDepartamento cDepartamento%ROWTYPE;

BEGIN

OPEN cDepartamento;

LOOP

FETCH cDepartamento INTO rDepartamento;

EXIT WHEN cDepartamento%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(rDepartamento.department_id || ',' ||

rDepartamento.department_name || ',' ||

rDepartamento.manager_id || ',' ||

rDepartamento.location_id || ',' ||

rDepartamento.city || ',' ||

rDepartamento.street_address || ',' ||

rDepartamento.state_province);

END LOOP;

CLOSE cDepartamento;

END;

EJERCICIO Nº 3 - CURSORES CON PARÁMETROS

set serveroutput on;

DECLARE

CURSOR cDep IS

select department_id,department_name from departments order by department_id;

CURSOR cEmp(dep_id number) IS

select last_name,job_title,hire_date,salary from employees inner join jobs using (job_id) where department_id=dep_id;

depart_id_aux departments.department_id%TYPE;

dep_nom departments.department_name%TYPE;

enom employees.last_name%TYPE;

ecarg jobs.job_title%TYPE;

e_fech_con employees.hire_date%TYPE;

esal employees.salary%TYPE;

V_LINE VARCHAR2(90);

BEGIN

V_LINE:='.....................................................................................';

OPEN cDep;

LOOP

FETCH cDep INTO depart_id_aux,dep_nom;

EXIT WHEN cDep%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('# DEP: '||depart_id_aux||' NOMBRE DEP: '||dep_nom);

IF cEmp%ISOPEN THEN CLOSE cEmp;

END IF;

OPEN cEmp(depart_id_aux);

LOOP

FETCH cEmp INTO enom,ecarg,e_fech_con,esal;

EXIT WHEN cEmp%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(enom||' '||ecarg||' '||e_fech_con||' '||esal);

END LOOP;

IF cEmp%ISOPEN THEN CLOSE cEmp;

END IF;

DBMS_OUTPUT.PUT_LINE(V_LINE);

END LOOP;

END;

TALLERES 3º PARTE

CREATE OR REPLACE FUNCTION NOMBRE(v_employee_id number)

RETURN varchar2

IS

v_nombre varchar2(60);

BEGIN

SELECT first_name ||' '|| last_name INTO v_nombre

FROM employees where employee_id=v_employee_id;

RETURN v_nombre;

END;

TALLERES 4º PARTE

Para ejecutar:

DECLARE

BEGIN

proc04();

END;

EJERCICIO Nº 1

CREATE OR REPLACE PROCEDURE proc01 IS

BEGIN

dbms_output.put_line('Hola mundo con los procedimientos de Oracle');

END;

EJERCICIO Nº 2

CREATE OR REPLACE PROCEDURE proc02 IS

BEGIN

dbms_output.put_line('Otro procedimiento pero ahora con otro texto');

END proc02;

EJERCICIO Nº3

CREATE OR REPLACE PROCEDURE proc03 IS

v_fecha_sistema DATE;

v_fecha_contratacion v_fecha_sistema%TYPE;

v_salario employees.salary%TYPE;

reg_empleados employees%ROWTYPE;

BEGIN

SELECT sysdate INTO v_fecha_sistema FROM dual;

SELECT * INTO reg_empleados FROM employees WHERE employee_id=200;

v_salario := reg_empleados.salary;

v_fecha_contratacion := reg_empleados.hire_date;

dbms_output.put_line('El nombre del empleado es:'||reg_empleados.first_name);

dbms_output.put_line('El salario del empleado es:'||v_salario);

dbms_output.put_line('La fecha de contratación del empleado es:'||v_fecha_contratacion);

dbms_output.put_line('La fecha del sistema es:'||v_fecha_sistema);

END proc03;

EJERCICIO Nº 4

CREATE OR REPLACE PROCEDURE proc04 IS

BEGIN

<>

DECLARE

v_cantidad NUMBER := 100;

BEGIN

DECLARE

v_cantidad NUMBER := 150;

BEGIN

-- Inicio de un bloque de codigo interno

dbms_output.put_line('Valor de la variable interna:'||v_cantidad);

dbms_output.put_line('Valor de la variable externa:'||ambito_externo.v_cantidad);

END;

-- Aqui podemos continuar con los datos de la variable etiquetada externamente

dbms_output.put_line('Valor de la variable:'||v_cantidad);

END;

END proc04;

TALLERES 5º PARTE

CREATE OR REPLACE PACKAGE BODY paquete1 IS

PROCEDURE proc01 IS

BEGIN

dbms_output.put_line('Hola mundo con los procedimientos de Oracle');

END;

PROCEDURE proc02 IS

BEGIN

dbms_output.put_line('Otro procedimiento pero ahora con otro texto');

END proc02;

FUNCTION NOMBRE(Emp_id number)

RETURN varchar2

IS

v_nombre varchar2(60);

BEGIN

SELECT first_name ||' '|| last_name INTO v_nombre

FROM employees where employee_id=Emp_id;

RETURN v_nombre;

END;

END paquete1;

CREATE OR REPLACE PACKAGE paquete1 IS

PROCEDURE proc01;

PROCEDURE proc02;

FUNCTION NOMBRE(Emp_id number)

RETURN VARCHAR2;

END paquete1;