proceyfunc
TRANSCRIPT
![Page 1: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/1.jpg)
PL/SQLSesión 3
Ejemplos de Procedimientos
Ing. Mauricio Bedoya
![Page 2: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/2.jpg)
Procedimientos
Crear un procedimiento para añadir un estudiante nuevo a la tabla estudiantes.
Se debe tener la secuencia creada en la base de datos.
SQL>CREATE OR REPLACE Procedure Nuevo_est(
p_nom estudiantes.nombre%type,
p_ape estudiantes.apellido%type,
p_esp estudiantes.especialidad%type)
As
Begin
Insert into estudiantes
values(secuencia.nextval,p_nom,p_ape,p_esp,0);
--Se inserta la nueva fila usando la secuencia para generar el Id y se le asigna
--el valor cero a al campo creditos
COMMIT;
END Nuevo_est;
/
![Page 3: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/3.jpg)
Invocación
SQL> BEGIN
Nuevo_est('Federico','Marulanda','Musica');
END;
/
También puede definirse en el bloque PL/SQL parámetros reales para pasar al procedimiento tal y como se observa a continuación:
![Page 4: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/4.jpg)
Invocación
SQL>DECLARE
--Variables que describen el nuevo estudiante
V_nom estudiantes.nombre%type:='Federico';
V_ape estudiantes.apellido%type:='Marulanda';
V_esp estudiantes.especialidad%type:='Musica';
BEGIN
Nuevo_est(Vnom,V_ape,V_esp);
END;
/
![Page 5: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/5.jpg)
FUNCIONES
Crear una función que devuelva el valor TRUE si la clase especificada tiene una ocupación mayor del 90% y FALSE en caso contrario.
SQL> CREATE OR REPLACE FUNCTION Lleno(
p_dep cursos.departamento%type,
p_curso cursos.ncurso%type)
Return boolean is
V_ne Number;
V_cupo Number;
V_ret Boolean;
V_full constant Number:=90;
BEGIN
![Page 6: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/6.jpg)
FUNCIONES
SELECT Nestudiantes,cupoestudiantes
INTO V_ne,V_cupo
FROM CURSOS
WHERE departamento=p_dep and
curso=p_curso;
If (v_ne/v_cupo*100) > v_full then
v_ret:=TRUE;
ELSE
v_ret:=FALSE;
End if;
Return v_ret;
End lleno;
/
![Page 7: Proceyfunc](https://reader035.vdocuments.us/reader035/viewer/2022071706/55b45450bb61ebed178b46d4/html5/thumbnails/7.jpg)
INVOCACION
SQL> DECLARE
Cursor c_clases is
Select departamento, ncurso
From cursos;
BEGIN
For V_i in c_clases loop
If lleno(V_i.departamento,V_i.ncurso) then
Insert into temporal(columnacaracter)
values(V_i.departamento || ' ' || V_i.ncurso || 'Esta casi lleno!')
End if;
End loop;
End;
/