欢迎投稿

今日深度:

Oracle中PL/SQL的执行部分和各种流程控制

Oracle中PL/SQL的执行部分和各种流程控制


Oracle中PL/SQL的执行部分和异常部分
 
一.PL/SQL的执行部分。
 
赋值语句。
 
赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值;另一种是通过SQL查询结果赋值。
 
用户赋值举例:
set serveroutput on;
accept abc prompt '请输入abc的值';
DECLARE
     a int:= &abc;
BEGIN
     dbms_output.put_line(a);
END;

 

 
查询赋值举例:
set serveroutput on;
DECLARE
  str varchar2(20);
BEGIN
  select ename into str from emp where empno='7369';
  dbms_output.put_line(str);
END;

 

 
流程控制语句。
 
PL/SQL的主要控制语句如下:
 
1.if...then      elsif … then      end if;
 
判断if正确则执行then,否则执行else(elsif为嵌套判断)
 
注意elsif,里面少一下e.
 
2.Case  var  when … then    when … then   end
 
有逻辑的从数值中做出选择
 
3.Loop     exit    end loop
 
循环控制,用判断语句执行exit
 
4.Loop       exit when …        end loop
 
同上,当when为真时执行exit
 
5.while..loop         end loop
 
当while为真时循环
 
6.for...in...loop        end loop
 
已知循环次数的循环
 
因为流程控制比较多,在这里就不一一举实例了,写几个比较经典的程序给大家看一下。
 
********打印9*9乘法表*********

for in..loop
set serveroutput on;
DECLARE
  i number;
  j number;
BEGIN
 for i in 1..9 loop
  for j in 1..i loop
    dbms_output.put(i||'*'||j||'='||(i*j)||'  ');
  end loop;
  dbms_output.put_line('');
 end loop;
END;
while  loop

set serveroutput on;
declare
  i number:=1;
  j number:=1;
begin
  while i<10 loop
    while j<=i loop
      dbms_output.put(i||'*'||j||'='||(i*j)||'  ');
      j:=j+1;
    end loop;
    i:=i+1;
    j:=1;
    dbms_output.put_line('');
  end loop;
end;

 

*********计算1+2+..+10的值*********

loop exit  & loop exit when

set serveroutput on;
declare
  i number:=1;
  i_sum number:=0;
begin
  loop
    i_sum:=i_sum+i;
    i:=i+1;
    if i>10 then
      exit;
    end if;
  end loop;
  dbms_output.put(i_sum);
  dbms_output.put_line('');                
end;

 

注意:put只是把输出结果放入缓冲区,直到遇到put_line时才会输出。所以只有put的时候,不会显示i_sum的结果。
 
可以把 if i>10 then exit; end if;  换成exit when i>10;这样就成为了loop ..exit when .. end loop 结构。
 
*********输入一个字符,判断是字母、数字还是其他字符****************

 if then elsif else

set serveroutput on;
declare
 i_char varchar2(2);
begin
  i_char:=&abc;
  if regexp_like(i_char,'^[a-z]$')   then
    dbms_output.put_line('输入的是字母');
  elsif  regexp_like(i_char,'^[0-9]$') then
    dbms_output.put_line('输入的是数字');
  else
    dbms_output.put_line('输入的是其他字符');
  end if;
end;
case  when

set serveroutput on;
declare
  i_char varchar2(2);
  i_result varchar2(30);
begin
  i_char:=&abc;
  i_result:=
  case
  when regexp_like(i_char,'^[a-z]$')   then
    '输入的是字母'
  when regexp_like(i_char,'^[0-9]$')   then
    '输入的是数字'
  else
    '输入的是其他字符'
  end;
  dbms_output.put_line(i_result);
end;

 

 
注意:在提示窗口中输入的时候,字符串一定要加单引号,否则就会出错,本人每次在这里都要拌一下。
 
SQL语句
 
SQL语句就是数据库查询语句,比较简单就不在这里说了。
 
游标语句
 
二.异常部分。
 
数据库中的异常跟java中的异常的机制和作用原理是一样的,只是代码和格式不一样,数据库中的异常分为三类:系统异常(预定义异常)、自定义异常以及引发应用程序异常。
 
系统异常
 
PL/SQL程序在运行过程中,可能会出现错误或异常现象
 
例如:无法建立到Oracle的连接或用0做除数。好的程序应该对可能发生的异常情况进行处理,异常处理代码在EXCEPTION块中实现
 
可以使用WHEN语句来定义异常。WHEN语句的使用方法如下:
 
EXCEPTION
 
       WHEN <异常情况名> THEN
 
             <异常处理代码>
 
       WHEN <异常情况名> THEN
 
          <异常处理代码>
 
       ...
 
       WHEN OTHERS THEN
 
          <异常处理代码>
 
常见的系统异常
自定义异常
 
当与一个异常错误相关的错误出现时,就会隐含触发该异常错误。用户定义的异常错误是通过显式使用 RAISE 语句来触发。当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码。
 
对于这类异常情况的处理,步骤如下:
 
在PL/SQL 块的定义部分定义异常情况:
 
<异常名称>  exception;
 
在PL/SQL 块的执行部分RAISE异常:
 
RAISE <异常名称>;
 
在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。
 
WHEN <异常名称> THEN
 
代码... 
 
引发应用程序异常

www.htsjk.Com true http://www.htsjk.com/oracle/23744.html NewsArticle Oracle中PL/SQL的执行部分和各种流程控制 Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分。 赋值语句。 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值;另一种是通...
评论暂时关闭