• PL/SQL


    flow control

    the if statement

    syntax :

    IF condition1 THEN

    action1;

    [ELsIF condition2 THEN

    action2;

    [ELSE

    action3;]

    END IF;

    eg :

    IF condition THEN

    SQL or PL-SQL Commands;

    ELSE

    SQL or PL-SQL Statements;

    END IF;

    eg :

    DECLARE

    l_x NUMBER := 10;

    l_y NUMBER := 20;

    BEGIN

    IF l_x > l_y THEN

    DBMS_OUTPUT.put_line(' X is bigger than y');

    ELSIF

    DBMS_OUTPUT.put_line('

    eg :

    v_Number1 number(10) := 12;

    v_Number2 number(10) := &v_Number2;

    eg :add two numbers 

    DECLARE

    --v_Number1 number(10) := 10;

    v_Number1 number(10) := &v_Number1;

    --v_Number2 number(10) := 30;

    v_Number2 number(10) := &v_Number2;

    v_result number(10);

    BEGIN

    v_result := v_Number1 + v_Number2;

    DBMS_OUTPUT.put_line('Total : ' || v_result);

    END;

    simple loop

    a loop is a section of code that needs to be executed a number of times.

    syntax :

    LOOP

    statements..

    EXIT WHEN variable condition;

    END LOOP;

    eg : to display 1 to 10

    DECLARE

    V1 number := 0;

    BEGIN

    LOOP

    V1 := V1 + 1;

    DBMS_OUTPUT.put_line('The number is :' || V1);

    EXIT WHEN V1 > 10;

    END loop;

    END;

    IF condition to check

    EXIT;

    END IF;

    the for loop

    no need to declare variable in for loop

    check the condition in the beginning

    no need to increase the value of the variable

    eg :

    FOR i in 1..10

    LOOP

    -- SQL Commands

    -- if condition

    -- exit when i = 6;

    -- if i > 6 then

    exit;

        END if;

    DBMS_OUTPUT.put_line(i);

    END LOOP;

    for i in reverse 1..10 (from 10 to 1.)

    &Start_Num

    &End_Num

    for in in reverse Start_Num..End_Num

    the while loop

    a while loop will continue as long as the condition is true.

    syntax :

    while condition

    loop

    statements

    end loop;

    note :

    condition check at the beginning

    break the loop

    increase or decrease the value of a variable

    declare the variable

    eg :

    WHILE l_x <= 100

    LOOP

    l_x := l_x +10;

    END LOOP;

    simple loop :

    loop

    exit when condition true

    end loop;

    while loop :

    while condition

    loop

    end loop;

    labeling loop

    you can give loops a label by prefixing the loop with th following :

    << label_name >>

    eg :

    <<my_loop>>

    while l_contimue

    eg : in nested loops

    <<my_while>>

    while i < 10

    loop

    <<my_for>>

    for i in 1..10

    loop

    if ...

    exit my_while; -- jump the outer while loop.

    else

    exit my_for; -- jump the inner for loop.

    end loop;

    end loop;

    eg :

    <<outer>>

    while l_continue

    loop

    <<inner>>

    for count in 20..29

    loop

    l_total := count + l_x;

    exit outer when l_total > l_overflow;

    end loop inner;

    l_continue := l_max > l_total;

    end loop ounter;

    you can label a block

    eg :

    <<block1>>

    declare

    l_x n

    the goto statement

    to directly jump to a particular section of code. goto is unconditional and final, there is no return,

    eg :

    declare

    l_x NUMBER := 30;

    l_y NUMBER :=20;

    BEGIN

    IF l_x > l_y THEN

    GOTO skip_calc;

    END IF;

    l_x := l_y;

    END;

    NESTED BLOCKS PL/SQL 

    labels

    labelname.bariablename(from the outer block, if you want to use variables in the inner block.)

    eg :Even Numbers

    from 1 to 100, display all even numbers using loop.

    simple loop

    while loop

    for loop

    END;

    while loop :

    DECLARE

    V1 NUMBER(3) := 0;

    BEGIN

    WHILE V1 <= 100

    LOOP

    V1 := V1 + 2

    -- or method 2

    -- if MOD(V1,2) = 0 THEN

    -- DBMS_OUTPUT.put_line(V1);

    DBMS_OUTPUT.put_line(V1);

    END LOOP;

    END;

     MOD(V1, 2) = 0 THEN (remaining)

    eg :

    LOOP

    V1 := V1 + 2;

    DBMS_OUTPUT.put_line(V1);

    EXIT WHEN V1 >= 100;

    END LOOP;

    eg :

    LOOP

    IF MOD(V1,2) = 0 THEN

    END IF;

    END LOOP;

    eg : sum of numbers from 1 to 100(using the simple or while or for loop)

    DECLARE

    V1 NUMBER(10) := 0;

    SUM NUMBER(10) := 0;

    BEGIN

    WHILE V1 <= 100

    LOOP

    V1 := V1 + 1;

    SUM := SUM + V1;

    END LOOP;

    DBMS_OUTPUT.put_line(SUM);

    END;

    eg :

    DECLARE

    Sum1 number(3) := 0;

    Num1 number(3) :set = 0;

    BEGIN

    while Num1 <= 100

    loop

    Sum1 := Sum1 + Num1;

    Num := Num1 + 1;

    END loop;

    DBMS_OUTPUT.put_line(Sum1);

    END;

    set serveroutput on

    eg : total of odd (1,3,5) numbers from 1 to 100

    eg : total of even (2,4,6) numbers from 1 to 100

    DECLARE 

    V1 NUMBER(10) := -1;

    total NUMBER(10) := 0;

    BEGIN

    WHILE V1 <100

    LOOP

    V1 := V1 + 2;

    total := total + V1;

    END LOOP;

    END;

    DECLARE

    V1 NUMBER(10) := 0;

    total NUMBER(10) := 0;

    BEGIN

    WHILE V1 <100

    LOOP

    V1 := V1 + 2;

    total := total + V1;

    END LOOP;

    END;

    select MOD(123, 10) from dual; --3

    select TRUNC(123/10) from dual; --12

    eg : 12345 print 1+2+3+4+5

    DECLARE

    V1 NUMBER(10) := &V1;

    total NUMBER(10) := 0;

    remaining NUMBER(10) := 0;

    BEGIN

    WHILE V1 != 0

    LOOP

    remaining := MOD(V1, 10);

    total := remaining + tota;'

    V1 := TRUNC (V1/10);

    END LOOP;

    DBMS_OUTPUT.put_line(total);

    END;

    sum up:

    if,elsif, else, end if

    loop end loop

    while loop

    for loop

    simple loop

    %rowtype

    &variable

    declare

    emp_no number(5) := &emp_no;

    employee emp%rowtype;

    begin

    select * into employee from emp where empno=emp_no;

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.EMPNO);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.ENAME);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.JOB);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.MGR);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.HIREDATE);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.SAL);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.COMM);

    DBMS_OUTPUT.put_line('Employee Number : ' || employee.DEPTNO);

    exception 

    when NO_DATA_FOUND then

    DBMS_OUTPUT.put_line('EMP does not exist');

    when OTHERS then

    end;

    eg : find the largest number from three numbers

    eg : write a program to reverse the number (eg : user &input 5678, you output 8765)

    DECLARE

    NUM NUMBER(10) := &NUM;

    REV NUMBER(10) := 0;

    REMAIN NUMBER(10) := 0;

    BEGIN

    WHILE NUM != 0

    LOOP

    REMAIN := MOD(NUM, 10);

    NUM := TRUNC(NUM/10);

    REV := REMAIN

    END;

  • 相关阅读:
    你不是不行只是对自己要求太低
    数学的思维方式
    python文档生成工具:pydoc、sphinx;django如何使用sphinx?
    python抽象类的实现方式:abc模块
    python的重试库tenacity用法以及类似库retry、requests实现
    dict扩展munch,支持yaml文件
    python读取yaml配置文件
    博客园的打赏功能、打赏插件
    junit5了解一下
    sulime代理设置、插件管理
  • 原文地址:https://www.cnblogs.com/jilili/p/4345791.html
Copyright © 2020-2023  润新知