1. PL/SQL Sesión 3 Ejemplos de Procedimientos Ing. Mauricio Bedoya
2. 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; /
3. 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:
4. 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; /
5. 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
6. 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; /
7. 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; /