zoukankan      html  css  js  c++  java
  • [bbk4982]第09集 Chapter 05 Writing Control Structures(01)

    Logic Tables

    Build a simple Boolean condition with a comparision operator.

    AND TRUE FALSE NULL
    TRUE TRUE FALSE NULL
    FALSE FALSE FALSE FALSE
    NULL NULL FALSE NULL

          

    OR TRUE FALSE NULL
    TRUE TRUE TRUE TRUE
    FALSE TRUE FALSE NULL
    NULL TRUE NULL NULL
    NOT  
    TRUE FALSE
    FALSE TRUE
    NULL NULL

    Boolean Expression or Logincal Expression 

    What is the value of flag in each case?

    flag := record_flag AND available_flag;

    RECORD_FLAG AVAILABLE_FLAG FLAG
    TRUE TRUE ?(1)
    TRUE FALSE ?(2)
    NULL TRUE ?(3)
    NULL FALSE ?(4)

    Short-Circuit Evaluation

    PL/SQL uses short-circuit evaluation,which means that PL/SQL need not evaluate all of the expression in an IF statements. 

    如果运算符号是AND,FALSE具有黑洞特色;

    如果运算符号是OR,TRUE具有黑洞特色;

    IF condition1 AND condition2
    THEN
        statements;
    ELSE
        statements;
    END IF;
    IF condition1 OR condition2
    THEN
        statements;
    ELSE
        statements;
    END IF;

    Demo01:如果condition1计算结果是FALSE,那么condition2就不用计算.

    Demo02:如果condition1计算结果是TRUE,那么condition2就不用计算.

    Quiz

    Is the following statement short-circuit when condition1 is NULL,when condition1 is FALSE?

    my_boolean := condtion1 AND condition2;

    The NULL Statement

    NULL除了可以作为一个表达式之外,还可以作为一个Statement.

    NULL expression;

    NULL Statement;

    Syntax:

    --NULL Statement;
    NULL;

    When you want PL/SQL to do absolutely nothing,you can use the NULL statements.The reasons to the use NULL statement are often the two following scenarios:

    • Improving program readability.
    • Using the NULL statement after a label.(oracle 语法规定,标签必须在语句之前.)
      • DECLARE
        ...
        BEGIN
            IF condition THEN GOTO lastpoint END IF;
            ...
            ...
            ...
        <<lastpoint>>
            NULL;
        END;
        /

    Iterative Control:Loop Statements

    • Loops repeat a statement(or a sequence of statements) multiple times.
    • There are three loop types:
      • Basic loop
      • FOR loop
      • WHILE loop

    Basic Loops

    Syntax:

    LOOP
        statement1;
        ...
        ...
        ...
        EXIT [WHEN condition];
    END LOOP;

    Basic Loops中如果没有EXIT ,就将会是一个死循环.

    DECLARE
            v_countryid     loc.country_id%TYPE := 'CA';
            v_loc_id        loc.location_id%TYPE;
            v_counter       NUMBER(2) := 1;
            v_new_city      loc.city%TYPE := 'Montreal';
    BEGIN
            SELECT MAX(location_id) INTO v_loc_id   FROM loc WHERE country_id = v_countryid;
            LOOP
                    INSERT INTO loc(location_id,city,country_id)
                    VALUES((v_loc_id + v_counter),v_new_city,v_countryid);
    
                    v_counter := v_counter + 1;
    
                    EXIT WHEN v_counter > 3;
    
            END LOOP;
    
            COMMIT;
    EXCEPTION
            WHEN OTHERS THEN
                    ROLLBACK;
                    DBMS_OUTPUT.PUT_LINE('Error Occured;');
    END;
    
    /
    
    SELECT location_id,city,country_id FROM loc;

    WHILE LOOPS

    Syntax:

    WHILE condition LOOP
        statement1;
        statement2;
    END LOOP;

    Use the WHILE loop to repeat statements while a condition is TRUE.

    DECLARE
            v_countryid     loc.country_id%TYPE := 'CA';
            v_loc_id        loc.location_id%TYPE;
            v_counter       NUMBER(2) := 1;
            v_new_city      loc.city%TYPE := 'alta';
    BEGIN
            SELECT MAX(location_id) INTO v_loc_id   FROM loc WHERE country_id = v_countryid;
    
            /*
            LOOP
                    INSERT INTO loc(location_id,city,country_id) VALUES((v_loc_id + v_counter),v_new_city,v_countryid);
    
                    v_counter := v_counter + 1;
    
                    EXIT WHEN v_counter > 3;
    
            END LOOP;
            */
    
            WHILE v_counter < 4
            LOOP
                    INSERT INTO loc(location_id,city,country_id) VALUES((v_loc_id + v_counter),v_new_city,v_countryid);
                    v_counter := v_counter + 1;
    END LOOP;
    
            COMMIT;
    EXCEPTION
            WHEN OTHERS THEN
                    ROLLBACK;
                    DBMS_OUTPUT.PUT_LINE('Error Occured;');
    END;
    
    /
    
    SELECT location_id,city,country_id FROM loc;

    FOR Loops(PL/SQL中默认的步长是1,不可修改)

    Use a For loop to shortcut the test for the number of iterations.

    Do not declare the counter;it is declared implicity.

    FOR counter IN [REVERSE] lower_bound..upper_bound 
    LOOP
        statement1;
        statement2;
        ...
    END LOOP;
    DEMO:REVERSE
    BEGIN
            FOR i IN REVERSE 1..10
            LOOP
                    DBMS_OUTPUT.PUT_LINE(i);
            END LOOP;
    END;
    
    /
    DECLARE
            v_countryid     loc.country_id%TYPE := 'CA';
            v_loc_id        loc.location_id%TYPE;
            v_counter       NUMBER(2) := 1;
            v_new_city      loc.city%TYPE := 'Montreal';
    BEGIN
            SELECT MAX(location_id) INTO v_loc_id   FROM loc WHERE country_id = v_countryid;
            /*
            LOOP
                    INSERT INTO loc(location_id,city,country_id)
                    VALUES((v_loc_id + v_counter),v_new_city,v_countryid);
    
                    v_counter := v_counter + 1;
    
                    EXIT WHEN v_counter > 3;
    
            END LOOP;
            */
    
            FOR i IN 1..3
            LOOP
                    INSERT INTO loc(location_id,city,country_id) VALUES((v_loc_id + v_counter),v_new_city,v_countryid);
    
                    v_counter := v_counter + 1;
    
            END LOOP;
    
    
            COMMIT;
    EXCEPTION
            WHEN OTHERS THEN
                    ROLLBACK;
                    DBMS_OUTPUT.PUT_LINE('Error Occured;');
    END;
    
    /
    
    SELECT location_id,city,country_id FROM loc;
  • 相关阅读:
    0111. Minimum Depth of Binary Tree (E)
    0735. Asteroid Collision (M)
    0133. Clone Graph (M)
    1007. Minimum Domino Rotations For Equal Row (M)
    2018-8-10-win10-uwp-关联文件
    2018-2-13-win10-uwp-手动锁Bitlocker
    2018-2-13-win10-uwp-切换主题
    jquery开关灯
    jquery隔行变色
    jquery体验
  • 原文地址:https://www.cnblogs.com/arcer/p/3038173.html
Copyright © 2011-2022 走看看