顺序结构
顺序结构表示程序中的各操作是按照它们出现的先后
顺序执行的。
例如,要计算两个员工的薪资总数,就可以用一个简单的顺序结果来实现,代码如下:
顺序执行的。
例如,要计算两个员工的薪资总数,就可以用一个简单的顺序结果来实现,代码如下:
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;
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/7271.html