proceyfunc

7
PL/SQL Sesión 3 Ejemplos de Procedimientos Ing. Mauricio Bedoya

Upload: mauricio-bedoya

Post on 26-Jul-2015

320 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Proceyfunc

PL/SQLSesión 3

Ejemplos de Procedimientos

Ing. Mauricio Bedoya

Page 2: Proceyfunc

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

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

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

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

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

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;

/