Oracle读书笔记-----PL/SQL编程(二)之程序流程

本文详细介绍了PL/SQL中的程序流程控制结构,包括条件结构(IF语句的各种形式)和循环结构(FOR循环、LOOP循环、WHILE循环),并通过多个实例展示了这些结构的应用。此外,还介绍了如何在PL/SQL程序中调用常见的SQL语句,如SELECT、INSERT、UPDATE和DELETE。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、PL/SQL程序流程控制

上面的结构与其他的高级语言程序一样,就不做介绍了。

下就条件结构和循环结构说明。

1)IF条件控制句

1.1IF...THEN语句

其语法是:

IFpTHEN

基本语句段;

ENDIF;

例如:

declare 
  flag1 integer := 1;
  flag2 integer := 2;
begin
  if flag1 < flag 2 then
    dbms_output.put_line('Flag1<flag2');
   end if;
end;

注意:上面的IFENDIF必须成对出现

1.2IF...THEN...ELSE语句

该语句用于需要在两个语句段之间做出选择时。其语法如下:

IFPTHEN

语句段1;

ELSE

语句段2;

EDNIF;

在该语句中,如果p的值为true,则执行语句段1,否则执行语句段2;实例:

declare
   flag1 integer := 5;
   flag2 integer := 8;
begin
  if flag1 <flag2 then
    dbms_output.put_line('flag1<flag2');
  else
    dbms_output.put_line('flag1>flag2');
  end if;
end;

1.3IF...THEN...ELSIF语句

该语句用于在三个或者三个以上的语句段之间做出选择。其语法段为:

IFP1THEN

语句段1;

ELSIFP2THEN

语句段2;

ELSE

语句段3;

ENDIF;

实例:

declare
  grade number := 98;
  results varchar2(10);
begin
  if grade >=90 then
    results := '优';
  elsif grade >= 80 then
     results :='良';
  elsif grade >=70 then
     results :='中';
  elsif grade >= 60 then
     results :='及格';
  else
    results :='差';
  end if;
  dbms_output.put_line(results);
end;

1.4CASE选择控制

该语句用于控制多分支选择功能。其实IF...THEN...ELSIF语句也可以实现这个功能,但是非常的麻烦。其语法结构为:

CASEE

WHENe1:THEN语句段1;

WHENe2:THEN语句段2;

WHENe3:THEN语句段3;

....................

WHENen:THEN语句段n;

ENDCASE;

实例:

declare 
   results varchar2(20) := 'B';
   grade varchar2(20);
begin
  case results
     when 'A' then grade := '90-100';
     when 'B' then grade := '80-89';
     when 'C' then grade := '70-79';
     when 'D' then grade := '60-69';
     when 'E' then grade := '<60';
     else grade := '不存在这个成绩等级';
  end case;
  dbms_output.put_line(grade);
end;

2)、循环控制

2.1FOR...LOOP语句

该形式如下:

FORI[REVERSE]INlb..hbLOOP

语句段;

ENDLOOP;

其中,i为整型变量,一般称为循环计算器,lbhb均为整型常量,分别代表了i的下限和上限,..为范围操作符。当没有使用参数REVERSE时,i的初值被设置为lb实例:

declare 
   i int := 0;
begin
  for i in 1..3 loop
    dbms_output.put_line('循环第'||to_char(i)||'次时'||to_char(i));
  end loop;
end;


2.2LOOP...EXIT循环控制

该语句用于控制死循环的。一般对于死循环的控制,有如下三种方式:

2.2.1利用if语句

LOOP

语句段;

IFPTHEN

EXIT;

ENDIF;

ENDLOOP;

实例:

declare
   i int := 0;
   results integer := 0;
begin
  loop
    results := results + i;
    if i = 10 then
      exit;
    end if;
    i : i+1;
  end loop;
  dbms_output.put_line('累加结果为:'||to_char(results));
end;


2.2.2利用EXIT...WHEN

LOOP

.........

EXITWHENe;

.............

ENDLOOP;

其中e为布尔表达式,如果e的值为true则循环退出,否则继续执行循环语句。实例:

declare 
   i int := 1;
   results integer := 0;
begin
  loop 
    results :=  results+i;
    exit when i = 10;
    i := i+1;
  end loop;
  dbms_output.put_line('累加结果为:'||to_char(results));
end;

2.2.3:利用标签

该语句的格式如下:

<<标签名>>

LOOP

.......

EXIT标签名WHENe;

........

ENDLOOP;

etrue时退出。注意,标签名必须在loop语句之前用“<<>>”定义实例:

declare
   i integer := 1;
   results integer := 0;
begin
  <<my_label>>
  loop
    results := results + i;
    exit my_label when i = 10;
    i := i+1;
  end loop;
  dbms_output.put_line('累加的结果为:'||to_char(results));
end; 

2.3WHILE...LOOP循环控制

WHILEeLOOP

语句段;

ENDLOOP;

E为循环条件,当e的值为true时则执行循环体,否则退出循环。

实例:

declare
   m integer := 100;
   n integer := 7;
   results integer;
begin
  results := m;
  while results >=n loop
    results := results - n;
  end loop;
  dbms_output.put_line(to_char(m)||'除以'||to_char(n)||'的余数'||to_char(results));
end;


二、在PL/SQL程序中调用SQL语句

实际上在PL/SQL程序中i调用SQL语句,对于不同的SQL语句调用的方法是不一样的。在这里介绍常用的几种语句的调用方法。

2.1调用SELECT语句

在调用这个语句之间,应该定义一个变量用来存储SELECT语句产生的结果,而且这个变量的结果要与SELECT之后的字段列表相一致。实例:

declare
  temp_emp scott.emp%rowtype;
begin
  select * into temp_emp from emp where empno=7369;
  dbms_output.put_line(to_char(temp_emp.empno||','||temp_emp.ename));
end;

注意:这种变量只能是一条记录,否则就会出错。而且如果SELECT语句无返回结果,同样会报错。

2.2调用INSERT语句

这条语句可以直接调用。实例:

declare
  empno emp.empno%type;
  ename emp.ename%type;
  job emp.job%type;
  mgr emp.mgr%type;
  hiredate emp.hiredate%type;
  sal emp.sal%type;
  comm emp.comm%type;
  deptno emp.deptno%type;
begin
  empno := 6676;
  ename := 'LILY';
  job := 'CLERK';
  mgr := 7899;
  hiredate := to_date('1981-12-12','yyyy-mm-dd');
  sal := 999.00;
  comm := 433.00;
  deptno := 20;
  insert into emp values(empno,ename,job,mgr,hiredate,sal,comm,deptno);
end;

2.3调用UPDATE语句

同样可以之间调用。实例:

declare
  tempno scott.emp.empno%type;
begin
  tempno := 7677;
  update emp set ename='AAA' where empno = tempno;
end;

2.4调用DELETE语句

直接调用。实例:

declare
  tempno scott.emp.empno%type;
begin
  tempno := 7677;
  delete form emp where empno = tempno;
end;
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值