1、1500 then shuilu:=3;susuankouchulu:4500 and gongzi=1500 then shuilu:=10;=105;9000 and gongzi=4500 then shuilu:=20;=555;35000 and gongzi=9000 then shuilu:=25;=1005;55000 and gongzi=35000 then shuilu:=30;=2755;80000 and gongzi=55000 then shuilu:=35;=5505; else shuilu:=45;=13505; end case;=gongzi*shuil
2、u/100-susuankouchulu; end if; dbms_output.put_line(king应缴纳的所得税是|v_tax);end;2更新某雇员的薪水 nianxianjiangjin NUMBER(10,2); ruzhishijian emp.hiredate%TYPE; select hiredate into ruzhishijianSCOTT if (sysdate-ruzhishijian=356*6) then nianxianjiangjin:=2000; else =1500; update emp set sal=nianxianjiangjin修改后3显
3、示某雇员相应的工资级别并显示所在部门名称、薪水和所在级别 jibie NUMBER(1); bumenName dept.dname%TYPE; xinshui emp.sal%TYPE; select dname,sal into bumenName,xinshui from emp e inner join dept d on e.deptno=d.deptno when xinshui=700 then jibie:=1;=4400 and xinshui=3201 then jibie:=2;=5000 and xinshui=4401 then jibie:=7000 and xin
4、shui=5001 then jibie:=4;=9999 and xinshui=7001 then jibie:=5;SCOTT所在部门是|bumenName|薪水|xinshui|级别|jibie);4为某雇员增加工资,每次增加100元,直到10000元停止 gongzi emp.sal%TYPE; loop=gongzi+100; exit when gongzi=10000; end loop; set sal=gongzi end;PL/Sql语句执行后,修改后的数据上机练习2DECLARE v_ename varchar2(4);BEGIN SELECT ename INTO v
5、_ename FROM emp WHERE empno=1234;雇员名:|v_ename);EXCEPTION WHEN NO_DATA_FOUND THEN雇员号不存在); WHEN value_error THEN姓名长度超过4位 WHEN OTHERS THEN错误号:|SQLCODE|错误描述:|SQLERRM);END; WHERE empno=7654; WHEN NO_DATA_FOUND THEN上机练习3 v_sal emp.sal%TYPE; v_deptno emp.deptno%TYPE; e_comm_is_null EXCEPTION; -定义异常类型变量 SEL
6、ECT sal,deptno INTO v_sal,v_deptno WHERE empno=7788; IF v_deptno=10 THEN IF v_sal10000 THEN UPDATE emp SET sal=10000 ELSE RAISE e_comm_is_null; END IF;雇员不存在!错误为:|SQLCODE|SQLERRM); WHEN e_comm_is_null THEN工资不低于10000元 WHEN others THEN出现其他异常解释1:以empno为7788为例,因为部门是“20”,则不显示解释2:修改代码: WHERE empno=7782; WH
7、ERE empno=7782; END IF 以empno为7782为例,因为部门是“10”,sal10000,做更新处理,不抛异常。解释3:再次执行以上的代码,因为部门是“10”,sal=10000,抛出异常,显示消息“工资不低于10000元”解释4: WHERE empno=3782; WHERE empno=3782;再次执行以上的代码,因为empno为3782的雇员不存在,抛出异常上机练习41使用游标计算所有雇员应缴纳的所得税 v_sum NUMBER(10,2): CURSOR emp_cursor IS SELECT sal FROM emp; OPEN emp_cursor; f
8、etch emp_cursor into gongzi; EXIT WHEN emp_cursor%NOTFOUND; v_sum:=gongzi+v_tax; close emp_cursor; dbms_output.put_line(v_sum);2使用游标更新所有雇员的薪水 SELECT hiredate FROM emp FOR UPDATE; for cur1 in emp_cursor loop where current of emp_cursor;执行代码后,数据变化如下:因为入职年限都大于6年,所以都修改成了15003使用游标查询并显示部门为“销售部”所有雇员相应的工资级别
9、并显示所在部门名称、薪水和所在级别 SELECT ename,sal,dname FROM emp e INNER join dept d ON e.deptno=d.deptno WHERE dname=SALES for cur1 in emp_cursor Loop when cur1.sal=4400 and cur1.sal=5000 and cur1.sal=7000 and cur1.sal=9999 and cur1.sal雇员姓名:|cur1.ename|cur1.sal|上机练习5CREATE OR REPLACE PROCEDURE fire_employee( eno
10、in emp.empno%type, -输入参数,雇员编号 on_Flag OUT number, -执行状态 os_Msg OUT VARCHAR2 -提示信息)is delete from emp where empno=eno; on_Flag: os_Msg:=成功 EXCEPTION=-1;该雇员不存在。=SQLCODE;=SQLERRM; v_no emp.empno%TYPE; on_Flag number(1); -执行状态 os_Msg VARCHAR2(200); -提示信息 v_no:=7788; fire_employee(v_no,on_flag,os_Msg); d
11、bms_output.put_line(on_flag); dbms_output.put_line(os_Msg);存储过程建立完毕 v_no employee.empno%TYPE;-调用get_sals存储过程,显示员工薪水CREATE OR REPLACE PROCEDURE get_sals( cur_salary OUT SYS_REFCURSOR,) AS OPEN cur_salary FOR SELECT empno,sal FROM employee;其他错误,与管理员联系。 v_empno employee.empno%type; v_sal employee.sal%type; emp_salary SYS_REFCURSOR; get_sals(emp_salary,on_Flag,os_Msg); IF on_flag=1 THEN LOOP FETCH emp_salary INTO v_empno, v_sal; EXIT WHEN emp_salary%notfound; DBMS_OUTPUT.PUT_LINE(v_empno|的薪水是 |v_sal); END LOOP; IF emp_salary%ISOPEN THEN CLOSE emp_salary;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1