98 - Control de flujo (if) |
Un profesor almacena las notas de sus alumnos en una tabla denominada "notas".
Eliminamos la tabla:
drop table notas;
Creamos la tabla con la siguiente estructura:
create table notas( nombre varchar2(30), nota number(4,2) );
Ingresamos algunos registros:
insert into notas values('Acosta Ana', 6.7); insert into notas values('Bustos Brenda', 9.5); insert into notas values('Caseros Carlos', 3.7); insert into notas values('Dominguez Daniel', 2); insert into notas values('Fuentes Federico', 8); insert into notas values('Gonzalez Gaston', 7); insert into notas values('Juarez Juana', 4); insert into notas values('Lopez Luisa',5.3);
Creamos o reemplazamos la función "f_condicion" que recibe una nota y retorna una cadena de caracteres indicando si aprueba o no:
create or replace function f_condicion (anota number) return varchar2 is condicion varchar2(20); begin condicion:=''; if anota<4 then condicion:='desaprobado'; else condicion:='aprobado'; end if; return condicion; end;
Realizamos un "select" sobre "notas" mostrando el nombre y nota del alumno y en una columna su condición (empleando la función creada anteriormente):
select nombre, nota, f_condicion(nota) from notas;
En el siguiente ejemplo omitimos la cláusula "else" porque sólo indicaremos acciones en caso que el "if" sea verdadero:
create or replace function f_condicion (anota number) return varchar2 is condicion varchar2(20); begin condicion:='aprobado'; if anota<4 then condicion:='desaprobado'; end if; return condicion; end;
Realizamos el "select" sobre "notas" mostrando la misma información que antes:
select nombre, nota, f_condicion(nota) from notas;
En el siguiente ejemplo colocamos un "if" dentro de otro "if". En el cuerpo de la función controlamos si la nota es menor a 4 (retorna "desaprobado"), luego, dentro del "else", controlamos si la nota es menor a 8 (retorna "regular") y si no lo es ("else"), retorna "promocionado":
create or replace function f_condicion (anota number) return varchar2 is condicion varchar2(20); begin condicion:=''; if anota<4 then condicion:='desaprobado'; else if anota<8 then condicion:='regular'; else condicion:='promocionado'; end if; end if; return condicion; end;
Realizamos el "select" sobre "notas" mostrando la misma información que antes:
select nombre, nota, f_condicion(nota) from notas;
Simplificamos la función anteriormente creada empleando la sintaxis "if...elsif":
create or replace function f_condicion (anota number) return varchar2 is condicion varchar2(20); begin condicion:=''; if anota<4 then condicion:='desaprobado'; elsif anota<8 then condicion:='regular'; else condicion:='promocionado'; end if; return condicion; end;
Realizamos el "select" sobre "notas" mostrando la misma información que antes:
select nombre, nota, f_condicion(nota) from notas;