if语句

oracle: elsif      java: else if

if (条件) then
pl/sql或sql语句
[elsif (条件) then ]
...可以有多个elsif
[else]
end if; ---必须写 结束大括号

例:

--完成根据员工的编号查看员工需要交的税的情况   大于等于3000交1%    大于等于1500交 0.5%,低于1500的不要交税
declare
v_empno emp.empno%type;
v_sal emp.sal%type;
v_name emp.ename%type;
v_rate emp.sal%type; --需要交的税
begin
v_empno :='&请输入员工编号';
select ename,sal into v_name,v_sal from emp where empno = v_empno;
if v_sal >= 3000 then
v_rate := v_sal*0.01;
elsif v_sal >= 1500 then
v_rate := v_sal*0.005;
else
v_rate := 0;
end if;
dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name
||',薪水:'||v_sal||',需要交的税:'||v_rate);
end;

swicth结构:oracle 的case   -decode 是对case的简写

case 等值判断

类似于java的switch

case  表达式
when 值1 then
...
when 值2 then
...
...
else
...
end case ;

例:

--查询员工的岗位, 显示的中文的
declare
v_empno emp.empno%type := '&请输入员工的编号';
v_job emp.job%type;
v_cJob emp.job%type;
begin
select job into v_job from emp where empno = v_empno;
case v_job
when 'CLERK' then
v_cJob :='文员';
when 'SALESMAN' then
v_cJob :='销售';
when 'MANAGER' then
v_cJob :='主管';
when 'ANALYST' then
v_cJob :='研发';
when 'PRESIDENT' then
v_cJob :='董事长';
else
v_cJob := '未知';
end case;
dbms_output.put_line(v_cJob);
end;

case 范围判断,等值(类似if)

case
when 条件 then
...
when 条件 then
...
...
else
...
end case;

例:

declare
v_empno emp.empno%type;
v_sal emp.sal%type;
v_name emp.ename%type;
v_rate emp.sal%type; --需要交的税
begin
v_empno :='&请输入员工编号';
select ename,sal into v_name,v_sal from emp where empno = v_empno;
/*
if v_sal >= 3000 then
v_rate := v_sal*0.01;
elsif v_sal >= 1500 then
v_rate := v_sal*0.005;
else
v_rate := 0;
end if;
*/
case
when v_sal >= 3000 then
v_rate := v_sal*0.01;
when v_sal >= 1500 then
v_rate := v_sal*0.005;
else
v_rate := 0;
end case;
dbms_output.put_line('编号为'||v_empno||'的员工姓名:' || v_name
||',薪水:'||v_sal||',需要交的税:'||v_rate);
end;

if ,case  if不能再sql语句中使用,   case 可以在sql语句中使用

--查询员工的信息,以及 >=3000  高新,   >=1500  中等收入, <1500 底薪   收入情况
-- 注意: *** sql语句中使用case, 不能使用end case, 使用end;
-- 而pl/sql块, case 的结束是一定使用 end case;
--decode() 函数, 在sql使用, 简化 case等值判断,
-- 在sql中使用范围判断, 使用case
select e.*, case
when e.sal >=3000 then '高新'
when e.sal >=1500 then '中等收入'
else '底薪'
end 收入情况
from emp e;

loop 循环 常用

Loop
Pl/SQL 语句
exit when 循环结束的条件;
end loop;

例:

--输出10次hello world
declare
v_str varchar2(30) :='hello world';
i number := 0;
begin
-- 类似do-while
loop
--oracle 没有 ++ -- i+=1
i:= i+1;
--输出helloworld
dbms_output.put_line(i||':'||v_str);
--退出循环
exit when i = 10;
end loop;
end;

while 循环

 while  条件  loop
--代码
end loop;

例:

--使用while来实现
declare
v_str varchar2(30) := 'hello world';
i number := 0;
begin
while i<10 loop
i := i+1;
dbms_output.put_line(i||':'||v_str);
end loop;
end;

for循环

从小到大:
for i in 最小值..最大值 loop
sql语句
end loop; i从小值, 每循环一次, 加1 , 加到最大值结束 从大到小:
for i in reverse 最小值..最大值 loop
sql语句
end loop; i从最大值, 每循环一次, 减1 , 减到最大值结束 --注意 这个i不需要我们声明

例:

-- 累加操作:  1+ 2+...+100
declare
sum1 number := 0;
begin
for i in 1..100 loop
sum1 := sum1 + i;
end loop;
DBMS_OUTPUT.PUT_LINE ('1到100的累加的和:'||sum1);
end; --打印 10,9,8,7,...1
begin
for i in reverse 1..10 loop
dbms_output.put_line(i);
end loop;
end;

Oracle--pl/sql编程-分支语句(判断、循环)的更多相关文章

  1. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  2. ORACLE PL/SQL编程详解(转)

    原帖地址:http://blog.csdn.net/chenjinping123/article/details/8737604 ORACLE PL/SQL编程详解 SQL语言只是访问.操作数据库的语 ...

  3. [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

    原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...

  4. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

    原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...

  5. ORACLE PL/SQL编程之八:把触发器说透

    原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...

  6. [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

    原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...

  7. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...

  8. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  9. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

    原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...

  10. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

随机推荐

  1. npm和yarn使用

    npm和yarn使用 他们都属于js包管理工具,都可以安装包或者模块yarn 是由facebook.google等联合开发推出的 区别: npm 下载包的话 比如npm install,它是按照包的排 ...

  2. 实用干货丨如何使用Prometheus配置自定义告警规则

    前 言 Prometheus是一个用于监控和告警的开源系统.一开始由Soundcloud开发,后来在2016年,它迁移到CNCF并且称为Kubernetes之后最流行的项目之一.从整个Linux服务器 ...

  3. 1. postman使用

    postman使用教程: https://blog.csdn.net/fxbin123/article/details/80428216 http://bayescafe.com/tools/use- ...

  4. MyBatis框架——动态SQL

    MyBatis 作为⼀个“半⾃动化”的 ORM 框架,需要开发者⼿动定义 SQL 语句. 在业务需求⽐较复杂的情 况下,⼿动拼接 SQL 语句的⼯作量会⾮常⼤,为了适⽤于不同的业务需求,往往需要做很多 ...

  5. [剑指offer]6.从尾到头打印链表+18.删除链表节点

    链表 6.从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 方法一 迭代 创建空列表res,将链表值head.val依次存进res,返回翻转后的res 代码 cl ...

  6. Cisco 综合配置(二)

    要求: 1. PC1 属于VLAN10,PC2属于VLAN20,网关:Master Router2. VLAN10.20 的网段为:192.168.10.0/24 . 192.168.20.0/24 ...

  7. 试译 Understanding Delta-Sigma Modulators

         接触Σ-Δ调制的时候发现国内有关的资料比较匮乏,因为缺乏了解还有一些人把其中的原理吹得神乎其神难以理解.其实Σ-Δ调制的原理是很简单.逻辑上很自然的,可以定性理解成传统ADC/DAC量化的是 ...

  8. c语言课程设计--图书/音乐管理系统

    这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 只能提供一个思 ...

  9. 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!

    罗曼罗兰说过:世界上只有一种英雄主义,就是看清生活的真相之后依然热爱生活. 对于 Lombok 我相信大部分人都不陌生,但对于它的实现原理以及缺点却鲜为人知,而本文将会从 Lombok 的原理出发,手 ...

  10. CompletableFuture异步编排

    什么是CompletableFuture CompletableFuture是JDK8提供的Future增强类.CompletableFuture异步任务执行线程池,默认是把异步任务都放在ForkJo ...