第三章 PLSQL编程上机操作Word格式文档下载.docx

上传人:b****5 文档编号:17535260 上传时间:2022-12-07 格式:DOCX 页数:14 大小:99.72KB
下载 相关 举报
第三章 PLSQL编程上机操作Word格式文档下载.docx_第1页
第1页 / 共14页
第三章 PLSQL编程上机操作Word格式文档下载.docx_第2页
第2页 / 共14页
第三章 PLSQL编程上机操作Word格式文档下载.docx_第3页
第3页 / 共14页
第三章 PLSQL编程上机操作Word格式文档下载.docx_第4页
第4页 / 共14页
第三章 PLSQL编程上机操作Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

第三章 PLSQL编程上机操作Word格式文档下载.docx

《第三章 PLSQL编程上机操作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第三章 PLSQL编程上机操作Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

第三章 PLSQL编程上机操作Word格式文档下载.docx

1500thenshuilu:

=3;

susuankouchulu:

4500andgongzi>

=1500thenshuilu:

=10;

=105;

9000andgongzi>

=4500thenshuilu:

=20;

=555;

35000andgongzi>

=9000thenshuilu:

=25;

=1005;

55000andgongzi>

=35000thenshuilu:

=30;

=2755;

80000andgongzi>

=55000thenshuilu:

=35;

=5505;

elseshuilu:

=45;

=13505;

endcase;

=gongzi*shuilu/100-susuankouchulu;

endif;

dbms_output.put_line('

king应缴纳的所得税是'

||v_tax);

end;

2.更新某雇员的薪水

nianxianjiangjinNUMBER(10,2);

ruzhishijianemp.hiredate%TYPE;

selecthiredateintoruzhishijian

SCOTT'

if(sysdate-ruzhishijian>

=356*6)then

nianxianjiangjin:

=2000;

else

=1500;

updateemp

setsal=nianxianjiangjin

修改后

3.显示某雇员相应的工资级别并显示所在部门名称、薪水和所在级别

jibieNUMBER

(1);

bumenNamedept.dname%TYPE;

xinshuiemp.sal%TYPE;

selectdname,salintobumenName,xinshui

fromempeinnerjoindeptd

one.deptno=d.deptno

whenxinshui<

=3200andxinshui>

=700thenjibie:

=1;

=4400andxinshui>

=3201thenjibie:

=2;

=5000andxinshui>

=4401thenjibie:

=7000andxinshui>

=5001thenjibie:

=4;

=9999andxinshui>

=7001thenjibie:

=5;

SCOTT所在部门是'

||bumenName||'

薪水'

||xinshui||'

级别'

||jibie);

 

4.为某雇员增加工资,每次增加100元,直到10000元停止

gongziemp.sal%TYPE;

loop

=gongzi+100;

exitwhengongzi=10000;

endloop;

setsal=gongzi

end;

PL/Sql语句执行后,修改后的数据

上机练习2

DECLARE

v_enamevarchar2(4);

BEGIN

SELECTenameINTOv_ename

FROMemp

WHEREempno=1234;

雇员名:

'

||v_ename);

EXCEPTION

WHENNO_DATA_FOUNDTHEN

雇员号不存在'

);

WHENvalue_errorTHEN

姓名长度超过4位'

WHENOTHERSTHEN

错误号:

||SQLCODE||'

错误描述:

||SQLERRM);

END;

WHEREempno=7654;

WHENNO_DATA_FOUNDTHEN

上机练习3

v_salemp.sal%TYPE;

v_deptnoemp.deptno%TYPE;

e_comm_is_nullEXCEPTION;

--定义异常类型变量

SELECTsal,deptnoINTOv_sal,v_deptno

WHEREempno=7788;

IFv_deptno=10THEN

IFv_sal<

10000THEN

UPDATEemp

SETsal=10000

ELSE

RAISEe_comm_is_null;

ENDIF;

雇员不存在!

错误为:

||SQLCODE||SQLERRM);

WHENe_comm_is_nullTHEN

工资不低于10000元'

WHENothersTHEN

出现其他异常'

解释1:

以empno为7788为例,因为部门是“20”,则不显示

解释2:

修改代码:

WHEREempno=7782;

WHEREempno=7782;

ENDIF

以empno为7782为例,因为部门是“10”,sal〈10000,做更新处理,不抛异常。

解释3:

再次执行以上的代码,因为部门是“10”,sal=10000,抛出异常,显示消息“工资不低于10000元”

解释4:

WHEREempno=3782;

WHEREempno=3782;

再次执行以上的代码,因为empno为3782的雇员不存在,抛出异常

上机练习4

1.使用游标计算所有雇员应缴纳的所得税

v_sumNUMBER(10,2):

CURSORemp_cursorIS

SELECTsal

FROMemp;

OPENemp_cursor;

fetchemp_cursorintogongzi;

EXITWHENemp_cursor%NOTFOUND;

v_sum:

=gongzi+v_tax;

closeemp_cursor;

dbms_output.put_line(v_sum);

2.使用游标更新所有雇员的薪水

SELECThiredate

FROMemp

FORUPDATE;

forcur1inemp_cursorloop

wherecurrentofemp_cursor;

执行代码后,数据变化如下:

因为入职年限都大于6年,所以都修改成了1500

3.使用游标查询并显示部门为“销售部”所有雇员相应的工资级别并显示所在部门名称、薪水和所在级别

SELECTename,sal,dname

FROMempeINNERjoindeptd

ONe.deptno=d.deptno

WHEREdname='

SALES'

forcur1inemp_cursorLoop

whencur1.sal<

=3200andcur1.sal>

=4400andcur1.sal>

=5000andcur1.sal>

=7000andcur1.sal>

=9999andcur1.sal>

雇员姓名:

||cur1.ename||'

||cur1.sal||'

上机练习5

CREATEORREPLACEPROCEDUREfire_employee(

enoinemp.empno%type,--输入参数,雇员编号

on_FlagOUTnumber,--执行状态

os_MsgOUTVARCHAR2--提示信息

is

delete

fromemp

whereempno=eno;

on_Flag:

os_Msg:

='

成功'

EXCEPTION

=-1;

该雇员不存在。

=SQLCODE;

=SQLERRM;

v_noemp.empno%TYPE;

on_Flagnumber

(1);

--执行状态

os_MsgVARCHAR2(200);

--提示信息

v_no:

=7788;

fire_employee(v_no,on_flag,os_Msg);

dbms_output.put_line(on_flag);

dbms_output.put_line(os_Msg);

存储过程建立完毕

v_noemployee.empno%TYPE;

--调用get_sals存储过程,显示员工薪水

CREATEORREPLACEPROCEDUREget_sals(

cur_salaryOUTSYS_REFCURSOR,

AS

OPENcur_salaryFOR

SELECTempno,salFROMemployee;

其他错误,与管理员联系。

v_empnoemployee.empno%type;

v_salemployee.sal%type;

emp_salarySYS_REFCURSOR;

get_sals(emp_salary,on_Flag,os_Msg);

IFon_flag=1THEN

LOOP

FETCHemp_salaryINTOv_empno,v_sal;

EXITWHENemp_salary%notfound;

DBMS_OUTPUT.PUT_LINE(v_empno||'

的薪水是'

||v_sal);

ENDLOOP;

IFemp_salary%ISOPENTHEN

CLOSEemp_salary;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1