miércoles, 30 de noviembre de 2016

La Lotería en PL/SQL

Objetivo:
• Presentar un ejemplo práctico en el cual es oportuno utilizar el paquete DBMS_RANDOM.

Nota: Esta publicación no tiene el mínimo interés de fomentar y/o promover los juegos de azar de ningún tipo, quien escribe decidió utilizar el ejemplo de lotería debido a que entendimos que el mismo se presta para dar un idea mas clara de lo util que resulta el paquete DBMS_RANDOM de Oracle.
____________________________________________________________________________________
SET SERVEROUTPUT ON
DECLARE
    TYPE typ_rec_lottery IS RECORD
    (
        number_one      NUMBER,
        number_two      NUMBER,
        number_three    NUMBER
    );

    TYPE typ_tab_lottery IS
        TABLE OF    typ_rec_lottery
            INDEX BY BINARY_INTEGER;

    v_lottery_list      typ_tab_lottery;
    v_lottery_name      VARCHAR2(10);
    v_lottery_time      VARCHAR2(25);

BEGIN
    FOR i IN 1..3 LOOP
        v_lottery_list(i).number_one   :=  TRUNC(DBMS_RANDOM.value(0, 99));
        v_lottery_list(i).number_two   :=  TRUNC(DBMS_RANDOM.value(099));
        v_lottery_list(i).number_three   :=  TRUNC(DBMS_RANDOM.value(099));
    END LOOP;

    FOR i IN 1..v_lottery_list.COUNT LOOP
        CASE
           WHEN i < 2 THEN
                v_lottery_name  :=  'Matutina';
                v_lottery_time  :=  '10:30:00 AM';
           WHEN i > THEN
                v_lottery_name  :=  'Nocturna';
                v_lottery_time  :=  '9:30:00 PM';
           ELSE
                v_lottery_name  :=  'Vespertina';
                v_lottery_time  :=  '3:30:00 PM';
        END CASE;

        DBMS_OUTPUT.PUT_LINE
                           (
                                '<<Lotería  '||v_lottery_name||'>>'||CHR(9)||'Hora: '||v_lottery_time||CHR(10)||
                                'Primer Número: '||v_lottery_list(i).number_one||CHR(10)||
                                'Segundo Número: '||v_lottery_list(i).number_two||CHR(10)||
                                'Tercer Número: '||v_lottery_list(i).number_three||CHR(10)||
                                RPAD('-',40,'-')
                           );
    END LOOP;
END;
/**/
---OUTPUT: