98 - Control de flujo (if)


Problema:

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;

Ingresemos el siguiente lote de comandos en el Oracle SQL Developer:

 drop table notas;

 create table notas(
  nombre varchar2(30),
  nota number(4,2)
 );

 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".
 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;

Retornar