Oracle pl/sql编程值控制结构

以下测试案例均来自于scott方案,运行前请确保该方案解锁。

1、条件分支状语

pl/sql中提供了三种条件分支状语,分别是:

if   then

if   then   else

if   then   else   if   then

1.1、if    then

编写一个过程.可以输出一个雇员名,如果该雇员的工资低于2000,就给该雇员的工资增加10%,

执行代码前,SMITH的SAL为800.代码如下:

create or replace procedure sp_pro6(spName varchar2) is
v_sal emp.sal%type;
begin
  select sal into v_sal from emp where ename=spName;
  if v_sal<2000 then
    update emp set sal=sal*1.1 where ename=spName;
    end if;
    end;
    
    select * from emp;
call sp_pro6('SMITH');

执行sp_pro6过程.

ok,Smith的工资增加了80,说明成功执行

1.2、if   then   else

编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0,就在原来的基础上加100,如果补助为0就把补助设为200

执行前,SMITH的补助为0,代码如下:

create or replace procedure sp_pro7(spName varchar2) is
v_comm emp.sal%type;
begin
  select comm into v_comm from emp where ename=spName;
  if v_comm<>0 then
    update emp set comm=v_comm+100 where ename=spName;
    else 
      update emp set comm=200 where ename=spName;
    end if;
    end;

执行过程

 call sp_pro7('SMITH');

ok,因为SMITH的补助为0所以直接变为200,说明代码执行成功

1.3、多重条件分支if   then   else if   else

编写一个过程,输入一个雇员的编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER,就给他的工资增加500,其他雇员的工资增加200.

SMITH是CLERK,那么按照逻辑其SAL会增加200

create or replace procedure sp_pro8(spName varchar2) is
v_job emp.job%type;
begin
  select job into v_job from emp where ename=spName;
  if v_job='PRESIDENT' then
    update emp set sal=sal+1000 where ename=spName;
  elsif v_job='MANAGER'  then
      update emp set sal=sal+500 where ename=spName;
      else
        update emp set sal=sal+200 where ename=spName;
    end if;
    end;

 执行过程

call sp_pro8('SMITH');

增加了200,ok,说明程序执行成功!!!

2、循环语句  -loop

是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop结尾,这种循环至少会被执行一次。

2.1、编写一个过程,输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加,代码如下:

create table users(id number(2),name varchar2(10));
create or replace procedure sp_pro5(spName varchar2) is
v_num number:=1;
begin
  loop
    insert into users values(v_num,spName);
    exit when v_num=10;
    v_num:=v_num+1;
  end loop;
end;

ok,代码编写完成,开始执行,代码如下:

call sp_pro5('xiaochao');

ok,完成需求

2.2、while循环

基本循环至少执行一次,而对while循环来说,只有条件为true时,才会执行循环体语句,while循环以while.....loop开始,以end loop结束;

需求:编写一个过程,输入用户名,并循环添加10个用户到users表中,用户编号从11开始,代码如下:

create or replace procedure sp_pro4(spName varchar2) is
v_num number:=11;
begin
  while v_num<=20
  loop
    insert into users values(v_num,spName);
    v_num:=v_num+1;
  end loop;
end;

ok,程序执行成功!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1165 日志分析

题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计。目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志。该日志记录了两类操作:第一类操作为集装箱...

34110
来自专栏菩提树下的杨过

AS1.0(2.0)中的XML示例

虽然Flash早就升级为AS3.0,但是FMS的服务端编程依然仅支持AS1.0(2.0),服务端与.net通讯的最简单方式莫过于请求一个RESTful的webS...

1996
来自专栏逢魔安全实验室

SQL注入ByPass的一些小技巧

? 01 — 前言 SQL注入从古至今都是一个经久不衰的影响严重的高危漏洞,但是网络安全发展到现在,如果想通过SQL注入直接获取数据或者权限,多多少少都需要绕...

3829
来自专栏诸葛青云的专栏

手把手教你用c语言编写网络病毒

恶意软件可能是第一个对我们产生影响的计算机安全问题.所以病毒在信息安全中是很重要的.

3502
来自专栏携程技术中心

干货 | 基于红黑树的高效IP归属地查询方案

作者简介 邢钦华,携程风控团队高级研发经理。2016年加入携程,是风控大数据平台Chloro的设计和开发的主要参与者。专注于大数据流式处理和用户行为分析在互联网...

4949
来自专栏FreeBuf

见招拆招:绕过WAF继续SQL注入常用方法

Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过。WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招。...

2575
来自专栏Linyb极客之路

并发编程之Exchanger

一、简介 Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换...

3656
来自专栏Java开发者杂谈

For update带来的思考

​ 之所以想写这个专题,是因为最近在做一个抢占任务的实现。假设数据库很多个任务,在抢占发生之前任务的状态都是FREE。现在假设同时有一堆抢占线程开始工作,抢占线...

1253
来自专栏Java开发者杂谈

分布式改造剧集1

背景介绍 ​ 我所在的项目组,使用的技术一直是接近原始社会的:jdk1.6 + SpringMVC + hessian + Mybatis,当前最火的中间件技术...

2934
来自专栏烙馅饼喽的技术分享

本人有生以来的第一篇博客,嘿嘿,就发这个吧, 怎样在虚拟主机上使用Castle框架的ActiveRecord

        我在某个私人项目中使用了Castle 的 ActiveRecord.用起来那是真叫个爽,整个项目里楞是一句SQL语句都没有,嘿嘿。超级喜欢上了这...

2705

扫码关注云+社区