结构化程序设计


结构化程序设计的三种基本结构是: 顺序结构选择结构循环结构

顺序结构

顺序结构表示程序中的各操作是按照它们出现的先后 顺序执行的。
例如,要计算两个员工的薪资总数,就可以用一个简单的顺序结果来实现,代码如下:

DECLARE
  --define variable
  v_sal1 NUMBER;
  v_sal2 NUMBER;
  v_sumsal NUMBER;
BEGIN
  --1.query employee number is 1
  SELECT sal
  INTO v_sal1
  FROM emp
  WHERE empno = &empno1;
  --2.query emplouee number is 2
  SELECT sal
  INTO v_sal2
  FROM emp
  WHERE empno = &empno2;
  --3.total salary
  v_sumsal := v_sal1 + v_sal2;
  --4.output
  DBMS_OUTPUT.put_line( '员工编号为 '
                        || &empno1
                        || '的工资和员工编号为 '
                        || &empno2
                        || '的工资总和为 '
                        || v_sumsal
                       );
END;


选择结构

选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。
DECLARE 
  --define constant
  c_manager CONSTANT NUMBER := 0.15;
  c_salesman CONSTANT NUMBER := 0.12;
  c_clerk CONSTANT NUMBER := 0.10;
  --define variable
  v_job VARCHAR2(100);
BEGIN
  SELECT job
  INTO v_job
  FROM emp
  WHERE empno = &empno1;
  
  IF v_job = 'CLERK'
    THEN 
      UPDATE emp
        SET sal = sal * (1 + c_clerk)
      WHERE empno = &empno1;
  ELSIF v_job = 'SALESMAN'
    THEN 
      UPDATE emp
        SET sal = sal * (1 + c_salesman)
      WHERE empno = &empno1;
  ELSIF v_job = 'MANAGER'
    THEN 
      UPDATE emp
        SET sal = sal * (1 + c_manager)
      WHERE empno = &empno1;
  END IF;
  DBMS_OUTPUT.put_line('已经为员工 ' || &empno1 || '成功加薪!!');
EXCEPTION 
  WHEN NO_DATA_FOUND
    THEN 
      DBMS_OUTPUT.put_line('没有找到员工数据');
END;


循环结构

循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在 循环结构中最主要的是:什么情况下执行循环?哪些操作需要循环执行?

--循环结构示例,演示循环为所有员工加薪
DECLARE
 --定义加薪比率常量
 c_Manager CONSTANT NUMBER:=0.15;
 c_SalesMan CONSTANT NUMBER:=0.12;
 c_Clerk CONSTANT NUMBER:=0.10;
 v_Job VARCHAR(100);                         --定义职位变量
 v_EmpNo VARCHAR(20);                        --定义员工编号变量
 v_Ename VARCHAR(60);                        --定义员工名称变量
 CURSOR c_Emp IS SELECT job,empno,ename from Scott.emp FOR UPDATE;
BEGIN
 OPEN c_Emp;   --打开游标
 LOOP          --循环游标
   FETCH c_Emp INTO v_Job,v_EmpNo,v_Ename;   --提取游标数据
   EXIT WHEN c_Emp%NOTFOUND;                 --如果无数据可提取退出游标
 IF v_Job='CLERK' THEN                       --如果为职员,加薪10%
   UPDATE scott.emp SET SAL=SAL*(1+c_Clerk) WHERE CURRENT OF c_Emp;
 ELSIF v_Job='SALESMAN' THEN                 --如果为销售职员,加薪12%
   UPDATE scott.emp SET SAL=SAL*(1+c_SalesMan) WHERE CURRENT OF c_Emp; 
 ELSIF v_Job='MANAGER' THEN                  --如果为经理,加薪15%
   UPDATE scott.emp SET SAL=SAL*(1+c_Manager) WHERE CURRENT OF c_Emp;  
 END IF;
 --显示完成信息
 DBMS_OUTPUT.PUT_LINE('已经为员工'||v_EmpNo||':'||v_Ename||'成功加薪!'); 
 END LOOP;
 CLOSE c_Emp;                --关闭游标 
 EXCEPTION
 WHEN NO_DATA_FOUND THEN     --处理PL/SQL预定义异常
   DBMS_OUTPUT.PUT_LINE('没有找到员工数据');
END; 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值