Vous êtes sur la page 1sur 10

Universidad Santiago de Chile

Facultad de Ciencia
Departamento de Matemtica y Ciencia de la Computacin
Licenciatura en Ciencia de la Computacin

Taller 5
PROGRAMACIN DE PROCEDIMIENTOS ALMACENADOS EN
PL/SQL ORACLE
Desarrollo de Software II

Integrantes: Matas Daza


Matas Fuentes
Profesor: Dino Araya S.
Fecha: Lunes, 02 de Octubre de 2017
I

ndice
PRIMERA PARTE: REGISTRO DE ERRORES 1
Item 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

SEGUNDA PARTE: MANTENEDORES DE TABLAS BSICAS 2


Item 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Item 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Item 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

TERCERA PARTE: PROCEDIMIENTOS ALMACENADOS 8


Item 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Item 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1

PRIMERA PARTE: REGISTRO DE ERRORES


De acuerdo al modelo de datos extendido del sistema simplificado del Proceso de Admisin PSU
a la Universidad de Santiago de Chile (Taller N 3), implemente los siguientes requerimientos:

Item 1.1
Construya la tabla auxiliar AUX_ERROR en su esquema de usuario

1 CREATE TABLE AUX_ERROR (


2 AER_DESC VARCHAR2(100) NOT NULL,
3 AER_TRANS VARCHAR2(1) NOT NULL,
4 AER_PROC VARCHAR2(50) NOT NULL,
5 AER_FECHA DATE NOT NULL );
6 COMMENT ON TABLE AUX_ERROR IS 'Registro de errores de transacciones en tablas bsicas';
7 COMMENT ON COLUMN AUX_ERROR.AER_DESC IS 'Descripcin del error';
8 COMMENT ON COLUMN AUX_ERROR.AER_TRANS IS 'Tipo de transaccin (C, A, E) que origina el
, error';
9 COMMENT ON COLUMN AUX_ERROR.AER_PROC IS 'Nombre del procedimiento donde se genera el error';
10 COMMENT ON COLUMN AUX_ERROR.AER_FECHA IS 'Fecha de generacin del error';
2

SEGUNDA PARTE: MANTENEDORES DE TABLAS BSICAS


Desarrolle en PL/SQL los siguientes requerimientos (mantenedores de tablas bsicas):

Item 2.1
El procedimiento almacenado PRO_MANT_FACULTAD, el cual permita crear, actualizar, y elimi-
nar facultades. Los parmetros del procedimiento son: cdigo y descripcin de la facultad, y tipo de
transaccin. Controlar las siguientes situaciones (registrando el error en la tabla AUX_ERROR):
Si la facultad que se requiere crear ya existe.
Si la facultad que se requiere eliminar tiene dependencias de registros en otra tabla.
Si algunos de los parmetros es de mayor longitud que la especificada en la tabla FACULTAD.

1 create or replace PROCEDURE "PRO_MANTENEDOR_FACULTAD" (p_cod number, p_nom varchar2, p_trans


, varchar2) is
2 v_aux number;
3 lon_aux number;
4

5 begin
6 if p_trans = 'C' then
7 begin
8 lon_aux:=1;
9 if p_cod < 9 then
10 if length(p_nom)<100 then
11 lon_aux:=0;
12 end if;
13 end if;
14 end;
15 begin
16 select count(fac_cod) into v_aux
17 from facultad
18 where fac_cod = p_cod;
19 commit;
20 end;
21 if v_aux = 0 then
22 if lon_aux=0 then
23 begin
24 insert into facultad
25 values (p_cod, p_nom);
26 commit;
27 end;
28 end if;
29 end if;
30 if v_aux <> 0 then
31 begin
32 insert into aux_error
33 values ('La facultad cod: '||p_cod||' ya existe', p_trans,
, 'pro_mantenedor_facultad', sysdate);
34 commit;
35 end;
36 end if;
37 if lon_aux <> 0 then
38 begin
39 insert into aux_error
3

40 values ('La datos ingresados no cumplen con las indicaciones ', p_trans,
, 'pro_mantenedor_facultad', sysdate);
41 commit;
42 end;
43 end if;
44

45 elsif p_trans = 'A' then


46 begin
47 lon_aux:=1;
48 if p_cod < 9 then
49 if length(p_nom)<100 then
50 lon_aux:=0;
51 end if;
52 end if;
53 end;
54 if lon_aux=0 then
55 update facultad
56 set fac_nom = p_nom
57 where fac_cod = p_cod;
58 end if;
59 if lon_aux <> 0 then
60 begin
61 insert into aux_error
62 values ('La datos ingresados no cumplen con las indicaciones ', p_trans,
, 'pro_mantenedor_facultad', sysdate);
63 commit;
64 end;
65 end if;
66

67 elsif p_trans = 'E' then


68 begin
69 select count(uni_facultad) into v_aux
70 from unidad, facultad
71 where uni_facultad = p_cod;
72 commit;
73 end;
74 if v_aux = 0 then
75 begin
76 delete from facultad where fac_cod = p_cod;
77 commit;
78 end;
79 else
80 begin
81 insert into aux_error
82 values ('La facultad cod: '||p_cod||' Tiene dependencias en otra tabla',
, p_trans, 'pro_mantenedor_facultad', sysdate);
83 commit;
84 end;
85 end if;
86 end if;
87

88 commit;
89 end;
4

Item 2.2
El procedimiento almacenado PRO_MANT_COMUNA, el cual permita crear, actualizar, y eliminar
comunas. Los parmetros del procedimiento son: cdigo y nombre de la comuna, cdigo de la regin
a la cual pertenece, y tipo de transaccin. Controlar las siguientes situaciones (registrando el error en
la tabla AUX_ERROR):
Si la comuna que se requiere crear ya existe.
Si la comuna que se requiere eliminar tiene dependencias de registros en otra tabla.
Si la regin a la que pertenece la comuna que se requiere crear no existe.

1 create or replace PROCEDURE "PRO_MANTENEDOR_COMUNA" (p_cod number, p_nom varchar, p_reg


, number, p_trans varchar2) is
2

3 v_aux number;
4 reg_aux number;
5

6 begin
7 if p_trans = 'C' then
8 begin
9 select count(com_cod) into v_aux
10 from comuna
11 where com_cod = p_cod;
12 commit;
13 end;
14

15 begin
16 select count(reg_cod) into reg_aux
17 from region
18 where reg_cod = p_reg;
19 commit;
20 end;
21

22 if (v_aux = 0) then
23 if (reg_aux <> 0) then
24 begin
25 insert into comuna
26 values (p_cod, p_nom, p_reg);
27 commit;
28 end;
29 end if;
30 end if;
31

32 if v_aux <> 0 then


33 begin
34 insert into aux_error
35 values ('La comuna cod: '||p_cod||' ya existe', p_trans,
, 'pro_mantenedor_comuna', sysdate);
36 commit;
37 end;
38 elsif reg_aux = 0 then
39 begin
40 insert into aux_error
41 values ('La comuna cod: '||p_cod||' se desea agregar a una regin que no
, existe', p_trans, 'pro_mantenedor_comuna', sysdate);
42 commit;
5

43 end;
44 end if;
45

46 elsif p_trans = 'A' then


47 update comuna
48 set com_nom = p_nom, com_region = p_reg
49 where com_cod = p_cod;
50 elsif p_trans = 'E' then
51

52 begin
53 select count(col_comuna) into v_aux
54 from comuna, colegio
55 where col_comuna = p_cod;
56 commit;
57 end;
58

59 if v_aux = 0 then
60 begin
61 delete from comuna where com_cod = p_cod;
62 commit;
63 end;
64 else
65 begin
66 insert into aux_error
67 values ('La comuna cod: '||p_cod||' Tiene dependencias en otra tabla',
, p_trans, 'pro_mantenedor_comuna', sysdate);
68 commit;
69 end;
70 end if;
71

72 end if;
73 commit;
74

75 end;
6

Item 2.3
El procedimiento almacenado PRO_MANT_UNIDAD, el cual permita crear, eliminar, y actualizar
unidades acadmicas. Los parmetros del procedimiento son: cdigo y nombre de la unidad, cdigo
de facultad responsable, y tipo de transaccin. Controlar las siguientes situaciones (registrando el
error en la tabla AUX_ERROR):
Si la unidad que se requiere crear ya existe.
El cdigo de la unidad que se requiere crear debe ser mayor o igual a 10 y menor o igual a 90.
Si la unidad que se requiere eliminar tiene dependencias de registros en otra tabla.
No pueden existir unidades con el mismo nombre (es indiferente si el nombre est escrito en
maysculas/minsculas).

1 create or replace PROCEDURE "PRO_MANTENEDOR_UNIDAD" (p_cod number, p_nom varchar2, p_fac


, number, p_trans varchar2) is
2

3 v_aux number;
4 nom_aux number;
5 largo_aux number;
6

8 begin
9 if p_trans = 'C' then
10

11 begin
12 largo_aux:=1;
13 if p_cod <= 90 then
14 if p_cod >= 10 then
15 largo_aux:=0;
16 end if;
17 end if;
18 end;
19

20 begin
21 select count(uni_cod) into v_aux
22 from unidad
23 where uni_cod = p_cod;
24 commit;
25 end;
26

27 begin
28 select count(uni_nom) into nom_aux
29 from unidad
30 where upper(UNI_NOM) = upper(p_nom);
31 commit;
32 end;
33

34 if (v_aux = 0) then
35 if (nom_aux = 0) then
36 if(largo_aux = 0) then
37 begin
38 insert into unidad
39 values (p_cod, p_nom, p_fac);
40 commit;
41 end;
42 end if;
7

43 end if;
44 end if;
45

46 if v_aux <> 0 then


47 begin
48 insert into aux_error
49 values ('La unidad cod: '||p_cod||' ya existe', p_trans,
, 'pro_mantenedor_unidad', sysdate);
50 commit;
51 end;
52 elsif nom_aux <> 0 then
53 begin
54 insert into aux_error
55 values ('El nombre: '||p_nom||' ya existe en la tabla unidad', p_trans,
, 'pro_mantenedor_unidad', sysdate);
56 commit;
57 end;
58 elsif largo_aux <> 0 then
59 begin
60 insert into aux_error
61 values ('El cdigo: '||p_cod||' no cumple las indicaciones', p_trans,
, 'pro_mantenedor_unidad', sysdate);
62 commit;
63 end;
64 end if;
65 elsif p_trans = 'A' then
66 update unidad
67 set uni_nom = p_nom, uni_facultad=p_fac
68 where uni_cod = p_cod;
69 elsif p_trans = 'E' then
70

71 begin
72 select count(car_unidad) into v_aux
73 from unidad, carrera
74 where car_unidad = p_cod;
75 commit;
76 end;
77

78 if v_aux = 0 then
79 begin
80 delete from unidad where uni_cod = p_cod;
81 commit;
82 end;
83 else
84 begin
85 insert into aux_error
86 values ('La unidad cod: '||p_cod||' Tiene dependencias en otra tabla',
, p_trans, 'pro_mantenedor_unidad', sysdate);
87 commit;
88 end;
89 end if;
90 end if;
91 commit;
92

93 end;
8

TERCERA PARTE: PROCEDIMIENTOS ALMACENADOS


Desarrolle en PL/SQL los siguientes requerimientos (generadores de listados):

Item 3.1
El procedimiento almacenado PRO_LISTADO_COMUNAS_REG, que dado un cdigo de regin
como parmetro, permita mostrar por pantalla el listado de comunas pertenecientes a dicha regin,
ordenadas por el nombre de la comuna en orden ascendente:

1 create or replace PROCEDURE "PRO_LISTADO_COMUNAS_REG" (p_cod number) is


2 cursor ccomuna is
3 select com_cod, com_nom, com_region
4 from comuna
5 where com_region = p_cod
6 order by com_nom;
7 reg_comuna ccomuna%rowtype;
8 begin
9 open ccomuna;
10 loop
11 fetch ccomuna into reg_comuna;
12 exit when ccomuna%notfound;
13 dbms_output.put_line('Cdigo '|| reg_comuna.com_cod ||' Comuna '||
, reg_comuna.com_nom);
14 end loop;
15 close ccomuna;
16 end PRO_LISTADO_COMUNAS_REG;

Item 3.2
El procedimiento almacenado PRO_LISTADO_MAX_MIN_PTJES, que dado un cdigo de facultad
como parmetro, permita mostrar por pantalla el listado de puntajes mximo y mnimo de postula-
cin de todas las carreras de dicha facultad:
1 create or replace PROCEDURE "PRO_LISTADO_MAX_MIN_PTJES" (p_cod number) is
2

3 begin
4 FOR r_fila in (SELECT CAR_COD as cod, CAR_NOM as car,
5 max(PSC_PTJE_PONDERAD) as pmax, min(PSC_PTJE_PONDERAD) as pmin
6 FROM CARRERA, POST_CARR, UNIDAD, FACULTAD
7 WHERE CAR_UNIDAD = UNI_COD AND UNI_FACULTAD = p_cod AND
8 PSC_CARR = CAR_COD
9 GROUP BY CAR_COD, CAR_NOM
10 ORDER BY CAR_COD DESC) LOOP
11 dbms_output.put_line ('Cdigo ' || r_fila.cod ||' Carrera '|| r_fila.car ||
12 ' Ptje.Mx ' || r_fila.pmax || ' Ptje.Mn ' || r_fila.pmin);
13 END LOOP;
14 end;

Vous aimerez peut-être aussi