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;
No hay comentarios:
Publicar un comentario