Oracle--pl/sql编程-分支语句(判断、循环)
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编程-分支语句(判断、循环)的更多相关文章
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- ORACLE PL/SQL编程详解(转)
原帖地址:http://blog.csdn.net/chenjinping123/article/details/8737604 ORACLE PL/SQL编程详解 SQL语言只是访问.操作数据库的语 ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
随机推荐
- go源码分析(三) 使用go http包开发web时遇到的坑之卸载插件,重启插件管理,仍然可以访问已经卸载的插件
问题描述: web页面下发重启指令后,对卸载插件的处理不完整(虽然列表已经没有插件描述,但是在HandleFunc的路由列表中依然存在) 我们需要清空路由列表map 路由列表结构见代码: net/ht ...
- [BUG]微信小程序生成小程序码"小程序页面路径不存在,请重新输入"
描述 小程序页面线上能打开. 微信官方 获取小程序页面小程序码 页面 ,输入 小程序页面路径,提示 "小程序页面路径不存在,请重新输入". 使用微信复制小程序路径方法, 也是同样的 ...
- Mol Cell Proteomics. | Prediction of LC-MS/MS properties of peptides from sequence by deep learning (通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征) (解读人:梅占龙)
通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征 解读人:梅占龙 质谱平台 文献名:Prediction of LC-MS/MS properties of peptides from se ...
- MybatisPlus SQL 打印控制台
#applicaton.yml 配置 mybatis-plus: configuration: # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台) log-impl: o ...
- 工作中常用到的Java集合类有哪些?
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y Java集合是我认为在Java基础中最最重要的知 ...
- mysql中的on
左右连接是一个性质所以我这里以左连接为例,写了一个小例子: 用到连接的时候on会常用到, on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录. 简单解释就是假设两个 ...
- 您知道SASS吗?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/4-reasons-to-use-sass-in-y ...
- [转载] 全局键盘钩子(WH_KEYBOARD)
为了显示效果,在钩子的DLL中我们会获取挂钩函数的窗体句柄,这里的主程序窗体名为"TestMain",通过FindWindow查找. KeyBoardHook.dll代码 libr ...
- Activiti入门案例
一.流程定义 Activiti-Designer 使用 Palette(画板) 在eclipse 或 idea 中安装activiti-designer 插件即可使用,画板中包括以下结点: Conne ...
- 分布式配置中心Apollo
1,什么是分布式配置中心 项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做 ...