IF逻辑结构:
IF-THEN-END IF
IF-THEN-ELSE-END IF
IF-THEN-ELSIF-END IF


语法

IF condition THEN
  statements;
[ELSIF condition THEN
  statements;]
[ELSE
  statements;]
END IF;

实例

IF v_ename = 'OSBORNE' THEN
  v_mgr := 22;
END IF;


if-then

. . .

v_job := 'SALESMAN';     
  v_deptno := 35;
  v_new_comm := sal * 0.20;
END IF;
if-then 语句嵌套

If var1>10 then
   if var2<var1 then
      var2:=var1+20;
   end if;
End if;

注意:上面代码中的两个end if,分别对应两个不同的if。在PL/SQL中实现if逻辑有两条规则:
规则1:每个if语句都有自己的then,以if开始的语句行不跟语句结束符(;)。
规则2:每个if语句块以相应的end if结束。


IF-THEN-ELSE

这种结构与IF-THEN语句非常相似,唯一不同的是在条件为false时,执行跟在else后的一条或多条语句。
...
IF v_shipdate - v_orderdate < 5 THEN  
  v_ship_flag := 'Acceptable';
ELSE
  v_ship_flag := 'Unacceptable';
END IF;
...

IF-THEN-ELSE语句嵌套

IF-THEN-ELSIF  这种结构用于替代嵌套if-then-else结构。
IF v_start > 100 THEN
  v_start := 2 * v_start;
ELSIF v_start >= 50 THEN              
  v_start := .5 * v_start;
ELSE
  v_start := .1 * v_start;
END IF;
. . .


CASE表达式

CASE selector
WHEN expression1 THEN sequence_of_statements1;
WHEN expression2 THEN sequence_of_statements2;
...
WHEN expressionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;

注意:为了避免CASE_NOT_FOUND异常,在编写CASE语句时应该带有ELSE语句。

从emp表中查询指定员工的工资,并判断该员工的工资是否低于2000,如果条件成立,那么将该员工的工资增加200
DECLARE
  v_sal emp.sal%TYPE;
  v_ename emp.ename%type:='&ename';
BEGIN
  SELECT sal INTO v_sal FROM scott.emp
  WHERE LOWER(ename)=LOWER(v_ename);
  IF v_sal <2000 THEN
      UPDATE emp SET sal=v_sal+200
      WHERE LOWER(ename)=LOWER(v_ename);
  END IF;
END;

根据给定的职工编号从emp表中查询该职工的奖金(comm字段的值),如果奖金的值不为0那么将表中该职工的奖金增加200,否则将该职工的奖金设置为100。

DECLARE
  v_comm emp.comm%TYPE;
  v_no emp.empno%TYPE;
BEGIN
  v_no:=&no;
  SELECT nvl(comm,0) INTO v_comm FROM emp WHERE empno=v_no;
  IF v_comm<>0 THEN
    UPDATE emp SET comm=comm+200 WHERE empno=v_no;
  ELSE
    UPDATE emp SET comm=100 where empno=v_no;
  END IF;
END;


构造逻辑条件

处理NULL值
使用IS NULL操作符处理NULL值
任何包含NULL的表达式其值为NULL
用NULL值与表达式连接时, NULL值被当作空串来处理


循环控制结构LOOP循环

Loops循环是一种控制结构,允许重复执行一组命令,直到决定停止循环为止.
三种loop循环类型: Basic loop,FOR loop,WHILE loop,
例子 给定任意一个整数,计算该数的阶乘

DECLARE
  v_num NUMBER(2):=&num;  --用户任意给定的一个整数
  v_pro NUMBER(20):=1;  
  i NUMBER(2):=1;  --控制循环结束的循环变量
BEGIN
  IF v_num=0 THEN
    v_pro:=1;
  ELSE
    LOOP
      v_pro:=v_pro*i;  --计算给定整数的阶乘
      i:=i+1;
      EXIT WHEN i>v_num;
    END LOOP;
  END IF;
  dbms_output.put_line('num:'||v_num||'  factorial:'||v_pro);
END;

(2)FOR Loop

例子 使用FOR循环实现某数的阶乘

DECLARE
  v_num NUMBER(2):=&num;
  v_pro NUMBER(20):=1;
BEGIN
  IF v_num=0 THEN
    v_pro:=1;
  ELSE
    FOR i IN 1..v_num LOOP
      v_pro:=v_pro*i;      
    END LOOP;
  END IF;

dbms_output.put_line('num:'||v_num||'  factorial:'||v_pro);
END;

(3)WHILE Loop

例子 使用WHILE循环实现某数的阶乘

DECLARE
  v_num NUMBER(2):=&num;
  v_pro NUMBER(20):=1;
  i NUMBER(2):=1;
BEGIN
  IF v_num=0 THEN
    v_pro:=1;
  ELSE
    WHILE i<=v_num LOOP
      v_pro:=v_pro*i;
      i:=i+1;
    END LOOP;
  END IF;
  dbms_output.put_line('num:'||v_num||'  factorial:'||v_pro);
END;

最后还有救是loop的多层嵌套运用(Attention)


oracle PL/SQL(procedure language/SQL)程序设计--控制结构(if else )的更多相关文章

  1. oracle PL/SQL(procedure language/SQL)程序设计

    PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言.PL/SQL实现了过程化语句(如分支.循环等)与SQL语句的无缝连接,将过 ...

  2. Oracle笔记--PL/SQL(Procedure Language & Structured Query Language)

    1.PL/SQL是一种高级数据库程序设计语言,专门用于在各种环境下对Oracle数据库进行访问.该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理. 2.PL/SQL是对SQ ...

  3. oracle PL/SQL(procedure language/SQL)程序设计之异常(exception)

    什么是异常?在PL/SQL中的一个标识.在程序运行期间被触发的错误.异常是怎样被触发的?产生一个Oracle错误.用户显示触发.怎样处理异常?用异常处理句柄捕获异常.传播异常到调用环境. 捕获异常 E ...

  4. oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包

    匿名PL/SQL块回顾 DECLARE (可选)    定义在PL/SQL块中要使用的对象BEGIN (必须)    执行语句EXCEPTION (可选)    错误处理语句END; (必须)匿名块( ...

  5. oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)

    匿名PL/SQL块回顾 DECLARE (可选)     定义在PL/SQL块中要使用的对象 BEGIN (必须)     执行语句 EXCEPTION (可选)     错误处理语句 END; (必 ...

  6. oracle PL/SQL(procedure language/SQL)程序设计之游标cursors

    游标 Cursors--Conception 每一条被Oracle服务器执行的SQL语句都有一个独立的游标与之相关联:隐式游标 Implicit cursors: 用于所有的DML和PL/SQL的SE ...

  7. oracle PL/SQL(procedure language/SQL)程序设计之触发器(trigger)

    创建触发器 触发器类似于过程和函数,都拥有声明.执行和异常处理过程的带名PL/SQL块.与包类似,触发器必须存储在数据库中.前面已经讲过,过程是显式地通过过程调用执行的,同时过程调用可以传递参数.与之 ...

  8. oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

  9. oracle PL/SQL(procedure language/SQL)程序设计(续集)之PL/SQL函数

    PL/SQL函数 examples:“ 构造一个邮件地址 v_mailing_address := v_name||CHR(10)||                                 ...

随机推荐

  1. Java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V

    今天接入激光推送,一直报错: Java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker; ...

  2. influxdb ERR: error parsing query: found -, expected

    ERR: error parsing query: found -, expected 使用时遇到这个问题,执行语句: select * FROM test10-cc-core01 本来以为和sql语 ...

  3. or1200下raw-os学习(任务篇)

    这次就来说说基于上一节介绍的系统框图去建立我们所需要的任务,顺便学习Raw-OS提供的API,根据上节的分析,对于Slave Board有如下设计: Slave Board有三个任务,分别负责测试阻抗 ...

  4. grumble.js

    grumble.js是一个jQuery插件.它提供了气泡提示框功能. 我们可以自定义气泡框的角度,大小,内容,以及回调方法等. 用法很简单: $('#grumble1').grumble( { tex ...

  5. 对.NET中Hashtable和ArryList的理解

    1.HashTabel 在.NET Framework中,Hashtable是System.Collections命名空间提供的集合对象,同时它也是一个可变长的数组,用于处理和表现类似key/valu ...

  6. [Angular2 Router] Load Data Based on Angular 2 Route Params

    You can load resource based on the url using the a combination of ActivatedRouteand Angular 2’s Http ...

  7. cocos2d-html5 笔记3: Node

    Cocos2d采用类似于Dom tree的那种形式来各个部分组织起来.最基本的基类是Node吧, Node Node 作为基类,函数很多,我觉得可以分为如下几类,树相关的函数, 一些公共的比较实用的函 ...

  8. 如何快速掌握CSS(各种CSS工具)

    CSS中的大量属性难以记忆,通过组合多种CSS工具,可以快速学习常见样式,并提高设计效率.这里给大家推荐一些比较好的在线工具,通过所见即所得图形化界面设计样式,直接得到对应的CSS代码.相比臃肿的集成 ...

  9. APP快速通过苹果AppStore审核九大诀窍

    [IT168技术]对于移动应用开发者来说, 最令人沮丧的可能莫过于辛辛苦苦开发的应用, 没能通过苹果AppStore的审核,或者在应用更新时遭遇下架.苹果的AppStore的审核流程和标准, 一向不透 ...

  10. lua分割字符串终究版(转载,有改动)

    来源http://codepad.org/BRHIS6WA --根据首字节获取UTF8需要的字节数 local function GetUTF8CharLength(ch) local utf8_lo ...