一、条件语句
1、流程控制-if else
(1)if
if 判断条件 then
      ...
end if;
(2)if-else
if 判断条件 then
      ...
else
      ...
end if;
(3)if-elsif
if 判断条件1 then
      ...
elsif 判断条件2 then
      ...
elsif 判断条件n then
      ...
end if;
(4)if-elsif-else
if 判断条件1 then
        ...
elsif 判断条件2 then
        ...
elsif 判断条件n then
        ...
else
        ...
end if;

例:


set serverout on;
declare

employee_number number;
begin
     select count(*) into employee_count from employees where employee_age>30;
     if employee_count>10 then
         dbms_output.put_line('公司有年龄大于30的员工');
    else
        dbms_output.put_line('公司没有年龄大于30的员工');
    end if;
end

统计年龄大于30的员工信息,存在多个条件判断(elsif)时如下:

declare

employee_number number;
begin
      select count(*) into employee_count from employees where employee_age>30;
      if employee_count=1 then
          dbms_output.put_line('公司有1名年龄大于30的员工');
     elsif employee_count>1 then
          dbms_output.put_line('公司有多年龄大于30的员工');
     else
         dbms_output.put_line('公司没有年龄大于30的员工');
     end if;
end


2、流程控制-case when
case when 与if else 有相同的效果。当需要匹配的情况较多时,可以使流程控制更加清晰
(1)case-when
case expression
    when value1 then
          ...
    when value2 then
         ...
    when valuen then
         ...
end case;
(2)case-when-else
case expression
    when value1 then
          ...
    when value2 then
         ...
    when valuen then
        ...
    else
       ...
end case;

例:


declare employee_number number;
begin
       select count(*) into employee_count from employees where employee_age>30;
      case employee_count
            when 1 then
                    dbms_output.put_line('公司有1名年龄大于30的员工');
            when 0 then
                    dbms_output.put_line('公司没有年龄大于30的员工');
           else
                  dbms_output.put_line('公司有多名年龄大于30的员工');
      end case
end


二、循环语句
1、无条件循环-loop
loop
    ...
end loop;

例:


declare v_id number :=0;
       v_name varchar2(20);
begin
  loop
      if v_id>=5 then
          exit;--退出循环
      end if;
      v_id:=v_id+1;

select empolyee_name into v_name from employees where employee_id=v_id;

dbms_output.put_line(v_id||'号员工是'||v_name);
  end loop;
end;

除了利用if判断退出循环外,还可以exit when的形式跳出循环


2、while循环
while 条件判断 loop
      循环操作
end loop;

while指定循环条件,其后仍然跟loop,此处的loop循环与无条件循环中的loop完全相同,只是增加了while条件而已。

例:


declare v_id number :=0;
       v_name varchar2(20);
begin
while v_id>=5
loop

v_id:=v_id+1;

select empolyee_name into v_name from employees where employee_id=v_id;

dbms_output.put_line(v_id||'号员工是'||v_name);
end loop;
end;


3、for循环
for .. in .. loop
     ...
end loop;

例:


declare v_id number :=0;
        v_name varchar2(20);
begin
for v_id in 1..5
loop

v_id:=v_id+1;

select empolyee_name into v_name from employees where employee_id=v_id;

dbms_output.put_line(v_id||'号员工是'||v_name);
end loop;
end;


4、循环控制关键字

(1)continue:终止本次循环,进入下一次循环。

(2)exit:终止本层循环,进入下一层循环。oracle中没有break关键字,用exit代替。

(3)return:直接跳出存储过程或函数。

转自:https://blog.csdn.net/qq_17503037/article/details/79261510

oracle中的控制语句的更多相关文章

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

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  2. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  3. Oracle中SQL语句分类

    Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlt ...

  4. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

    --varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...

  5. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

  6. ORACLE中的LTRIM、RTRIM和TRIM

    LTRIM.RTRIM和TRIM在ORACLE中的用法:1.LTRIM(C1,C2)其中C1和C2都可以字符串,例如C1是'Miss Liu',C2'MisL'等等.这是第一个和SQL SERVER不 ...

  7. oracle中临时表是用来做什么的

    oracle中临时表是用来做什么的 某些情况下, 需要 多个非常大的表关联的情况下, 但是需要检索的, 是少量的数据的时候.可以先把 大表的数据, 检索出那一小部分, 然后插入到 临时表中, 最后再关 ...

  8. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  9. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

随机推荐

  1. zabbix 监控redis 挂掉自动重启 并发送企业微信

    1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...

  2. 攻防世界Web之fakebook

    打开题目,得到一个网页,包含一个表格.两个按钮. 习惯性先查看网页源码,但没发现有效信息. <!doctype html> <html lang="ko"> ...

  3. 字符编码之间的转换 utf-8 , gbk等,(解决中文字符串乱码)

    目录 1.背景. 2.编码的理解 3.编码之间的相互转化 4. str类型说明 5. 可以使用的编码类型 6.参考文章 1.背景 Python中与其他程序进行交互时,如果存在字符串交互,特别是字符串中 ...

  4. sprint boot 手动快速创建web应用(2)

    1.打开Eclipse新建maven项目 2.导入maven依赖 <parent> <groupId>org.springframework.boot</groupId& ...

  5. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  6. [hdu7076]ZYB's kingdom

    不难发现,操作1可以看作如下操作:对于删去$a_{1},a_{2},...,a_{k}$后的每一个连通块(的点集)$V$,令$\forall x\in V,x$的收益加上$s$(其中$s=\sum_{ ...

  7. [bzoj1927]星际竞速

    考虑没有爆发,那么相当于是带权最小不可交路径覆盖,由于只能从编号小的到编号大的,因此一定是DAG,而DAG的最小路径覆盖可以拆点并跑最大流,那么带权的只需要跑费用流即可(S向i连(1,0)的边,i'向 ...

  8. [luogu3573]RAJ-Rally

    先建一个$S$和$T$,$\forall 1\le i\le n$连边$(S,i)$和$(i,T)$,则最长路即为$S到T的最长路-2$ 对于这张DAG,求出一个拓扑序,点$i$为第$i$个(特别的, ...

  9. [bzoj1635]最高的牛

    初始如果没有限制,很显然每一头牛高度都是h当只有一个限制,让h[a]到h[b]的高度都减1即可容易发现两个限制不会相交(否则必然矛盾),只会包含或相离,因此没有影响,直接差分/线段树即可(注意:1.不 ...

  10. [luogu5665]划分

    暴力dp,用f[i][j]表示前i个数,最后一个区间是(j,i]的最小答案,转移方程用可以用前缀和来优化,复杂度为$o(n^3)$(然后可以各种优化到$o(n^2)$,但这不需要)输出f[i][j], ...