Oracle 学习:PL/SQL循序渐进全面学习教程--课程十二 编写控制结构语句

来源:互联网 发布:java split函数用法 编辑:程序博客网 时间:2024/05/21 11:26

 课程十二 编写控制结构语句
  
  本课重点:
  1、结构控制的的用途和类型
  2、IF 结构
  3、构造和标识不同的循环
  4、使用逻辑表
  5、控制流和嵌套
  
  注意:以下实例中标点均为英文半角
  
  一、控制执行流
  可以是分支和循环:IF THEN END IF
  IF condition THEN
  statements;
  [ELSIF condition THEN
  statements;]
  [ELSE
  statements;]
  END IF;
  例子:IF V_ENAME='OSBORNE' THEN
  V_MGR:=22;
  END IF;
  这里我们可以注意,PLSQL和C语言或JAVA在条件上的不同,=代表关系运算,而:=代表赋值。
  看一个函数:
  create  FUNCTION calc_val
  (v_start IN NUMBER)
  RETURN NUMBER
  IS
  BEGIN
  IF v_start > 100 THEN
  RETURN (2 * v_start);
  ELSIF v_start >= 50 THEN
  RETURN (.5 * v_start);
  ELSE
  RETURN (.1 * v_start);
  END IF;
  END calc_val;
  现在,虽然我们尚未讲解CREATE 函数或过程,但可以看到IF 条件在其中的作用。
  二、注意LOGIC TABLE中的逻辑对应关系
  1、NOT、AND、OR
  2、任何表达式中含有空值结果都为 NULL
  3、连接字符串中含有空值会把NULL作为 EMPTY STRING
  declare
  v_deptno dept.deptno%type;
  v_loc dept.loc%type;
  V_FLAG BOOLEAN ;
  V_REC BOOLEAN :=FALSE; --此值改为TRUE、NULL、FALSE进行不同的比较
  V_AVA BOOLEAN:=NULL;
  begin
  V_FLAG:=V_REC AND V_AVA;
  IF V_FLAG=TRUE THEN
  DBMS_OUTPUT.PUT_LINE ('TRUE');
  ELSIF V_FLAG=FALSE THEN
  DBMS_OUTPUT.PUT_LINE ('FALSE');
  ELSE
  DBMS_OUTPUT.PUT_LINE ('NULL');
  END IF;
  end;
  /
  值得注意的是:NULL AND FALSE ---> FALSE
  这是在实践中总结出来的。
  三、基本循环基础:
  1、LOOP
  statement1;
  statement2;
  . . .
  EXIT [WHEN condition];
  END LOOP;
  v_ord_id s_item.ord_id%TYPE := 101;
  v_counter NUMBER (2) := 1;
  BEGIN
  . . .
  LOOP
  INSERT INTO s_item (ord_id, item_id)
  VALUES (v_ord_id, v_counter);
  v_counter := v_counter + 1;
  EXIT WHEN v_counter > 10;
  END LOOP;
  2、FOR循环:
  FOR index IN [REVERSE] lower_bound..upper_bound LOOP
  statement1;
  statement2;
  . . .
  END LOOP;
  
  实例:DECLARE
  V_LOWER NUMBER:=1;
  V_UPPER NUMBER:=23;
  BEGIN
  DBMS_OUTPUT.PUT_LINE('');
  FOR I IN V_LOWER..V_UPPER LOOP
  DBMS_OUTPUT.PUT_LINE(I);
  END LOOP;
  END;
  /
  3、WHILE 循环:
  WHILE condition LOOP
  statement1;
  statement2;
  . . .
  END LOOP;
  4、循环是可以多层嵌套的。可以用<<LABEL>>做循环的标签。
  ...
  BEGIN
  <<Outer–loop>>LOOP
  v_counter :=v_counter+1;
  EXIT WHEN v_counter>10;
  <<Inner–loop>>LOOP
  ...
  EXIT Outer_loop WHEN total_done = ’YES’;
  –– Leave both loops
  EXIT WHEN inner_done = ’YES’;
  –– Leave inner loop only
  ...
  END LOOP Inner_Loop;
  ...
  END LOOP Outer_loop;
  END;
  
  总结:本章内容较为繁杂,虽然不是很难,而且多数与其他高级语言有某种共性,但大家要多多练习,用实践来

检验对某些含糊的猜测。