Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Ejemplo de código SQL de Bloque Anónimo II

27 marzo, 2019

Al igual que el caso anterior, antes de comenzar el bloque anónimo se debe activar la salida por pantalla de la siguiente forma:



Ahora ya se puede comenzar el bloque anónimo:

 

      En primer lugar, se establece la estructura de todo bloque anónimo. Se almacena el valor del año que se introduzca por teclado en una variable. Además, se inicializa el valor de una variable booleana que indicará si el año es bisiesto a false. (Explico en el siguiente paso el algoritmo y la razón de esta variable)

 

      Para realizar el algoritmo, vamos a buscar los casos en los que un año es bisiesto. Si el año introducido es bisiesto se modificará el valor de la variable bisiesto. Si ningún caso es válido, la variable mantiene el valor original, indicando el año no es bisiesto. La primera condición en los que un año es bisiesto es que sea divisible entre 4 pero no entre 100:

En caso de que esta condición no se cumpla, también serán bisiestos los años que sean divisibles entre 400. Por ello, añado una condición:

 

Alternativamente podría haberse incluido todo en una sóla condición en el primer if mediante un or. No se ha optado por esta opción para mejorar la legibilidad.

Por último, se debe mostrar por pantalla si el año es o no bisiesto con el formato indicado:

 

 

      Se prueba el primer valor 1990 que NO es bisiesto:

 

      Se prueba el primer valor 2000 que es bisiesto:

Se prueba el primer valor 1996 que es bisiesto:



 

      Se prueba el primer valor 1886 que NO es bisiesto:

 

      Se prueba el primer valor 1992 que es bisiesto:

 

    Se prueba el primer valor 1824 que es bisiesto:

 

Este sería el código SQL

 

 

SET SERVEROUTPUT ON;
 
DECLARE
  anyo NUMBER(4);
  bisiesto BOOLEAN := FALSE;
BEGIN
  anyo := &anyo_introducido;
  IF MOD(anyo, 4) = 0 AND MOD(anyo, 100) <> 0 THEN
    bisiesto := TRUE;
  elsif MOD(anyo, 400) = 0 THEN
    bisiesto := TRUE;
  END IF;
 
  IF bisiesto THEN
    dbms_output.put_line(anyo || ' es un año bisiesto');
  ELSE 
    dbms_output.put_line(anyo || ' no es un año bisiesto');
  END IF;
END;