zoukankan      html  css  js  c++  java
  • 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,程序执行成功!

  • 相关阅读:
    HDU5792 World is Exploding(树状数组)
    POJ3415 Common Substrings(后缀数组 单调栈)
    POJ2406 Power Strings(KMP,后缀数组)
    HDU5489 Removed Interval(动态规划)
    HDU1899 Sum the K-th's(树状数组)
    Codeforces Round #363 Fix a Tree(树 拓扑排序)
    数组-07. 求一批整数中出现最多的个位数字
    数组-06. 找出不是两个数组共有的元素
    数组-05. 字符串字母大小写转换
    数组-04. 查找整数
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6669722.html
Copyright © 2011-2022 走看看