zoukankan      html  css  js  c++  java
  • 02_流程控制


      1 -----------------------------------------------------
      2            条件判断
      3 -----------------------------------------------------
      4 7. 使用 IF ... THEN ... ELSIF ... THEN ...ELSE ... END IF;
      5 
      6 要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000'; 
      7 若在 500010000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'
      8 (方法一)
      9 declare
     10   v_salary employees.salary%type;
     11 begin
     12   --通过 select ... into ... 语句为变量赋值
     13  select salary into v_salary
     14  from employees
     15  where employee_id = 150;
     16  
     17  dbms_output.put_line('salary: ' || v_salary);
     18  
     19  -- 打印变量的值
     20  if v_salary >= 10000 then
     21     dbms_output.put_line('salary >= 10000');
     22  elsif v_salary >= 5000 then
     23     dbms_output.put_line('5000 <= salary < 10000');
     24  else
     25     dbms_output.put_line('salary < 5000');
     26  end if;
     27 (方法二)
     28 declare
     29      v_emp_name employees.last_name%type;
     30      v_emp_sal employees.salary%type;
     31      v_emp_sal_level varchar2(20);
     32 begin
     33      select last_name,salary into v_emp_name,v_emp_sal from employees where employee_id = 150;
     34      
     35      if(v_emp_sal >= 10000) then v_emp_sal_level := 'salary >= 10000';
     36      elsif(v_emp_sal >= 5000) then v_emp_sal_level := '5000<= salary < 10000';
     37      else v_emp_sal_level := 'salary < 5000';
     38      end if;
     39      
     40      dbms_output.put_line(v_emp_name||','||v_emp_sal||','||v_emp_sal);
     41 end;
     42 
     43 7+ 使用 CASE ... WHEN ... THEN ...ELSE ... END 完成上面的任务
     44 
     45 declare
     46        v_sal employees.salary%type;
     47        v_msg varchar2(50);
     48 begin     
     49        select salary into v_sal
     50        from employees
     51        where employee_id = 150;
     52        
     53        --case 不能向下面这样用
     54        /*
     55        case v_sal when salary >= 10000 then v_msg := '>=10000' 
     56                   when salary >= 5000 then v_msg := '5000<= salary < 10000'
     57                   else v_msg := 'salary < 5000'
     58        end;
     59        */
     60  
     61        v_msg := 
     62              case trunc(v_sal / 5000)
     63                   when 0 then 'salary < 5000'
     64                   when 1 then '5000<= salary < 10000'
     65                   else 'salary >= 10000'
     66              end;
     67        
     68        dbms_output.put_line(v_sal ||','||v_msg);
     69 end;
     70 
     71 8. 使用 CASE ... WHEN ... THEN ... ELSE ... END;
     72 
     73 要求: 查询出 122 号员工的 JOB_ID, 若其值为 'IT_PROG', 则打印 'GRADE: A'; 
     74                         'AC_MGT', 打印 'GRADE B', 
     75                         'AC_ACCOUNT', 打印 'GRADE C'; 
     76                         否则打印 'GRADE D'
     77 
     78 declare
     79        --声明变量
     80        v_grade char(1);
     81        v_job_id employees.job_id%type;
     82 begin
     83        select job_id into v_job_id
     84        from employees
     85        where employee_id = 122;
     86        
     87        dbms_output.put_line('job_id: ' || v_job_id);
     88        
     89        --根据 v_job_id 的取值, 利用 case 字句为 v_grade 赋值
     90        v_grade :=  
     91                case v_job_id when 'IT_PROG' then 'A'
     92                              when 'AC_MGT' then 'B'
     93                              when 'AC_ACCOUNT' then 'C'
     94                              else 'D'
     95                 end;
     96                 
     97        dbms_output.put_line('GRADE: ' || v_grade);
     98 end; 
     99 -----------------------------------------------------
    100            循环结构
    101 -----------------------------------------------------
    102 9. 使用循环语句打印 1 - 100.(三种方式)
    103 
    104 1).  LOOP ... EXIT WHEN ... END LOOP
    105 declare
    106        --初始化条件
    107        v_i number(3) := 1;
    108 begin
    109        loop
    110        --循环体
    111         dbms_output.put_line(v_i);
    112     --循环条件
    113         exit when v_i = 100;
    114     --迭代条件
    115         v_i := v_i + 1;
    116        end loop;
    117 end;
    118 
    119 2). WHILE ... LOOP ... END LOOP
    120 declare
    121        --初始化条件
    122        v_i number(3) := 1;
    123 begin
    124        --循环条件
    125        while v_i <= 100 loop
    126          --循环体
    127              dbms_output.put_line(v_i);
    128          --迭代条件
    129              v_i := v_i + 1;
    130        end loop;
    131 end; 
    132 
    133 3).
    134 begin
    135        for i in 1 .. 100 loop
    136              dbms_output.put_line(i);
    137        end loop;
    138 end;
    139 
    140 10. 综合使用 if, while 语句, 打印 1 - 100 之间的所有素数
    141 (素数: 有且仅用两个正约数的整数, 2, 3, 5, 7, 11, 13, ...).
    142 declare
    143   v_flag number(1):=1;
    144   v_i number(3):=2;
    145   v_j number(2):=2;
    146 begin
    147 
    148   while (v_i<=100) loop
    149         while v_j <= sqrt(v_i) loop
    150               if (mod(v_i,v_j)=0) then v_flag:= 0;
    151           end if;
    152              
    153           v_j :=v_j +1;
    154         end loop;
    155         
    156     if(v_flag=1) then dbms_output.put_line(v_i);
    157     end if;
    158 
    159         v_flag :=1;
    160         v_j := 2;
    161         v_i :=v_i +1;
    162    end loop;
    163 
    164 end;
    165 
    166 
    167 (法二)使用for循环实现1-100之间的素数的输出
    168 declare
    169   --标记值, 若为 1 则是素数, 否则不是
    170   v_flag number(1) := 0;
    171 begin
    172    for i in 2 .. 100 loop
    173 
    174        v_flag := 1;     
    175          
    176        for j in 2 .. sqrt(i) loop
    177            if i mod j = 0 then
    178               v_flag := 0;    
    179            end if;        
    180        end loop;
    181        
    182        if v_flag = 1 then
    183            dbms_output.put_line(i);
    184        end if;
    185        
    186    end loop;
    187 end;
    188 
    189 11. 使用 goto
    190 declare
    191   --标记值, 若为 1 则是素数, 否则不是
    192   v_flag number(1) := 0;
    193 begin
    194    for i in 2 .. 100 loop
    195        v_flag := 1;     
    196          
    197        for j in 2 .. sqrt(i) loop
    198            if i mod j = 0 then
    199               v_flag := 0;
    200               goto label; 
    201            end if;        
    202        end loop;
    203        
    204        <<label>>
    205        if v_flag = 1 then
    206            dbms_output.put_line(i);
    207        end if;
    208        
    209    end loop;
    210 end; 
    211 
    212 11+.打印1——100的自然数,当打印到50时,跳出循环,输出“打印结束”
    213 (方法一)
    214 begin
    215   for i in 1..100 loop
    216       dbms_output.put_line(i);
    217       if(i = 50) then 
    218       goto label;
    219       end if;
    220   end loop;
    221       
    222       <<label>>
    223       dbms_output.put_line('打印结束');
    224 
    225 end;
    226 (方法二)
    227 begin
    228   for i in 1..100 loop
    229       dbms_output.put_line(i);
    230       if(i mod 50 = 0) then dbms_output.put_line('打印结束');
    231       exit;
    232       end if;
    233   end loop;
    234 end;

  • 相关阅读:
    基于WPF的UI自动化测试[1] 自动化测试工具
    PSR
    技术型人员如何晋升项目经理
    HyperV 组件架构(1)—总体架构
    从技术到管理:工作转型后角色定位
    Web性能优化方案
    一个项目经理的一些个人体会
    从技术人才到项目管理的跨越
    研发项目经理的管理
    从程序类转向销售类工作,该如何进行?
  • 原文地址:https://www.cnblogs.com/shici/p/14406154.html
Copyright © 2011-2022 走看看