Fundamentals PL/SQL: Chapter 04 Writing Control Structures


6 Responses to “Fundamentals PL/SQL: Chapter 04 Writing Control Structures”

  1. Juan Pablo Angamarca Says:

    Bloque PL/SQL demostrando uso de CASE. Se usa una variable de sustitución para ingresar una calificación, se muestra la nota y la valoración.

    SET SERVEROUTPUT ON
    DECLARE
    v_grade char(1) := upper(’&p_grade’);
    v_appraisal VARCHAR2(20);
    BEGIN
    v_appraisal :=
    CASE v_grade
    WHEN ‘A’ THEN ‘Excellent’
    WHEN ‘B’ THEN ‘Very Good’
    WHEN ‘C’ THEN ‘Good’
    ELSE ‘No such grade’
    END;
    DBMS_OUTPUT.PUT_LINE(’Grade: ‘ || v_grade || ‘, Appraisal: ‘ || v_appraisal);
    END;
    /

    Salida del programa:
    Grade: A, Appraisal: Excellent
    PL/SQL procedure successfully completed.

  2. Claudia Castañeda Says:

    A continuación un ejemplo del uso de la estructura IF-THEN_ELSIF en donde se determinar el bono de un empleado basado en el departamento del mismo.
    SET SERVEROUTPUT ON

    DECLARE
    v_deptno NUMBER(10):=10;
    v_bonus NUMBER(10);
    BEGIN
    IF v_deptno = 10 THEN
    v_bonus := 5000;
    ELSIF v_deptno = 80 THEN
    v_bonus := 7500;
    else
    v_bonus := 2000;
    END IF;
    DBMS_OUTPUT.PUT_LINE(’Departamento: ‘||v_deptno||’ Bonus: ‘||v_bonus);
    END;
    /

    Departamento: 10 Bonus: 5000
    PL/SQL procedure successfully completed.

  3. Juan Pablo Angamarca Says:

    Bloque PL/SQL que hace uso de un bucle (loop). Calculamos el máximo country ID para Canadá, y con un bucle insertamos tres filas en orden consecutivo al máximo ID.

    DECLARE
    v_country_id locations.country_id%TYPE := ‘CA’;
    v_location_id locations.location_id%TYPE;
    v_counter NUMBER(2) := 1;
    v_city locations.city%TYPE := ‘Montreal’;
    BEGIN
    SELECT MAX(location_id) INTO v_location_id FROM locations
    WHERE country_id = v_country_id;
    LOOP
    INSERT INTO locations(location_id, city, country_id)
    VALUES ((v_location_id + v_counter), v_city, v_country_id);
    v_counter := v_counter + 1;
    EXIT WHEN v_counter > 3;
    END LOOP;
    END;
    /

    Confirmamos las operaciones para ver los resultados.

    COMMIT;

    La salida es:

    LOCATION_ID STREET_ADDRESS POSTAL_CODE CITY STATE_PROVINCE CO
    1400 2014 Jabberwocky Rd 26192 Southlake Texas US
    1500 2011 Interiors Blvd 99236 South San Francisco California US
    1700 2004 Charade Rd 98199 Seattle Washington US
    1800 460 Bloor St. W. ON M5S 1X8 Toronto Ontario CA
    2500 Magdalen Centre, The Oxford Science Park OX9 9ZB Oxford Oxford UK
    1801 Montreal CA
    1802 Montreal CA
    1803 Montreal CA

    8 rows selected.

    Se insertaron las tres filas al final.

  4. Iliana Burguan Says:

    Pongo a disposicion de ustedes un bloque PL/SQL que nos permite hacer las comparaciones con el operador AND con FALSE, TRUE y NULL.

    SET SERVEROUTPUT ON
    DECLARE

    v_expresion1 CHAR(5) := UPPER(’&p_expresion1′);
    v_expresion2 CHAR(5) := UPPER(’&P_expresion2′);

    BEGIN
    IF v_expresion1 = ‘TRUE’THEN
    v_expresion2 := CASE v_expresion2
    WHEN ‘TRUE’ THEN ‘TRUE’
    WHEN ‘FALSE’THEN ‘FALSE’
    WHEN ‘NULL’ THEN ‘NULL’
    END;
    END IF;
    IF v_expresion1 = ‘FALSE’ THEN
    v_expresion2 := CASE v_expresion2
    WHEN ‘TRUE’ THEN ‘FALSE’
    WHEN ‘FALSE’ THEN ‘FALSE’
    WHEN ‘NULL’ THEN ‘FALSE’
    END;
    END IF;
    IF v_expresion1 = ‘NULL’ THEN
    v_expresion2 := CASE v_expresion2
    WHEN ‘TRUE’ THEN ‘NULL’
    WHEN ‘FALSE’ THEN ‘FALSE’
    WHEN ‘NULL’ THEN ‘NULL’
    END;
    END IF;

    DBMS_OUTPUT.PUT_LINE(v_expresion2);
    END;

  5. Juan Pablo Angamarca Says:

    Uso de bucles WHILE: hace los mismo que en mi comentario anterior, sólo que usando un bucle WHILE. La condición se conoce de antemano, y se realiza las operaciones mientras esa condición sea verdadera.

    DECLARE
    v_country_id locations.country_id%TYPE := ‘CA’;
    v_location_id locations.location_id%TYPE;
    v_counter NUMBER(2) := 1;
    v_city locations.city%TYPE := ‘Montreal’;
    BEGIN
    SELECT MAX(location_id) INTO v_location_id FROM locations
    WHERE country_id = v_country_id;
    WHILE v_counter <= 3 LOOP
    INSERT INTO locations(location_id, city, country_id)
    VALUES ((v_location_id + v_counter), v_city, v_country_id);
    v_counter := v_counter + 1;
    END LOOP;
    END;
    /
    COMMIT;
    SELECT * FROM LOCATIONS;

    Resultado:

    PL/SQL procedure successfully completed.

    Commit complete.

    LOCATION_ID STREET_ADDRESS POSTAL_CODE CITY STATE_PROVINCE CO
    1801 Montreal CA
    1802 Montreal CA
    1803 Montreal CA
    1400 2014 Jabberwocky Rd 26192 Southlake Texas US
    1500 2011 Interiors Blvd 99236 South San Francisco California US
    1700 2004 Charade Rd 98199 Seattle Washington US
    1800 460 Bloor St. W. ON M5S 1X8 Toronto Ontario CA
    2500 Magdalen Centre, The Oxford Science Park OX9 9ZB Oxford Oxford UK

  6. Diego Guamán Says:

    Uso de Bucles con FOR

    El siguiente código utiliza el bucle FOR para insertar tres nuevas localizaciones a partir del máximo ID para el pais de codigo CA y la ciudad sea MONTREAL

    DECLARE
    v_country_id locations.country_id%TYPE:=’CA’;
    v_location_id locations.location_id%TYPE;
    v_city locations.city%TYPE:=’Montereal’;
    BEGIN
    SELECT MAX(location_id) INTO v_location_id
    FROM locations
    WHERE country_id = v_country_id;
    FOR I in 1..3 loop
    INSERT INTO locations(location_id, city, country_id)
    VALUES ((v_location_id + i), v_city, v_country_id);
    END LOOP;
    END;
    /

Leave a Reply