码迷,mamicode.com
首页 > 其他好文 > 详细

02_流程控制

时间:2021-02-18 13:15:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:declare   evel   div   之间   ast   rom   循环条件   for   line   


  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;

 

02_流程控制

标签:declare   evel   div   之间   ast   rom   循环条件   for   line   

原文地址:https://www.cnblogs.com/shici/p/14406154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!