oracle中的控制语句
一、条件语句
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中的控制语句的更多相关文章
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
- Oracle中PL/SQL简介、基本语法以及数据类型
Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...
- Oracle中SQL语句分类
Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlt ...
- Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述
--varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...
- Oracle中如何实现Mysql的两表关联update操作
在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...
- ORACLE中的LTRIM、RTRIM和TRIM
LTRIM.RTRIM和TRIM在ORACLE中的用法:1.LTRIM(C1,C2)其中C1和C2都可以字符串,例如C1是'Miss Liu',C2'MisL'等等.这是第一个和SQL SERVER不 ...
- oracle中临时表是用来做什么的
oracle中临时表是用来做什么的 某些情况下, 需要 多个非常大的表关联的情况下, 但是需要检索的, 是少量的数据的时候.可以先把 大表的数据, 检索出那一小部分, 然后插入到 临时表中, 最后再关 ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- ORACLE 中ROWNUM用法总结(转)
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
随机推荐
- python 处理xml 数据
1 import xml.sax 2 import xml.sax.handler 3 4 # python 处理xml 数据 类,将xml数据转化为字典 5 ''' 6 原数据:<?xml v ...
- Access的分页代码
if giPage = 1 then begin sSQL := 'SELECT TOP 10 * FROM dw_demo WHERE '+sWhere +' ORDER BY '+sOrder+' ...
- Docker配置tomcat端口映射后无法访问(404)
1.配置tomcat端口映射 2.访问测试 3.修改webapps文件,webapps.dist是所需文件 4.虚拟机中重新访问 5.在主机也能访问成功(注意路径为虚拟机IP,不是localhost)
- Java不同时区(timezone)之间时间转换
最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间. 一.关于时区的一些概 ...
- [loj3285]Circus
将奶牛的状态用序列$\{a_{1},a_{2},...,a_{m}\}$来描述,其中$a_{i}$表示第$i$头奶牛的位置(奶牛数量为$m$) 下面,先来考虑对于某个特定的$m$如何处理: 对于一条简 ...
- [nowcoder5667G]Greater and Greater
令$f[i][j]$表示前i个数的后j位能否匹配b的前j位,有转移$f[i][j]=f[i-1][j-1] \ \&\ [b_{j}\le a_{i}]$ 将$g[i][j]=[b_{j}\ ...
- PHP绕过MD5比较的各种姿势
1.用==进行弱类型比较时, 可以通过两个0e开头后面纯数字的md5绕过 php在进行弱类型比较时,如果为字符串为纯数字,包括浮点数.科学计数法.十六进制数等,都会转化为数字类型再进行比较,利用这点, ...
- 面向对象的程序设计之JS创建对象的9种模式及其优缺点
目录 1.new Object () 2.字面式创建对象 3.工厂模式 4.构造函数模式 4.1.将构造函数当作函数 4.2.构造函数的问题 5.原型模式 5.1.理解原型对象 5.2.原型与in操作 ...
- P3722 [AH2017/HNOI2017]影魔(单调栈+扫描线+线段树)
题面传送门 首先我们把这两个贡献翻译成人话: 区间 \([l,r]\) 产生 \(p_1\) 的贡献当且仅当 \(a_l,a_r\) 分别为区间 \([l,r]\) 的最大值和次大值. 区间 \([l ...
- 洛谷 P6860 - 象棋与马(找性质+杜教筛)
题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...