PLSQL经典练习

上传人:m**** 文档编号:45197890 上传时间:2018-06-15 格式:DOCX 页数:9 大小:33.81KB
返回 下载 相关 举报
PLSQL经典练习_第1页
第1页 / 共9页
PLSQL经典练习_第2页
第2页 / 共9页
PLSQL经典练习_第3页
第3页 / 共9页
PLSQL经典练习_第4页
第4页 / 共9页
PLSQL经典练习_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PLSQL经典练习》由会员分享,可在线阅读,更多相关《PLSQL经典练习(9页珍藏版)》请在金锄头文库上搜索。

1、PL/SQLPL/SQL 经典练习经典练习*/ =PL/SQL 编程= */-先把 scott 里面的表弄到 test 表空间里面来CREATE TABLE EMP ASSELECT * FROM SCOTT.EMP; CREATE TABLE DEPT ASSELECT * FROM SCOTT.DEPT; /*上机 1 */ -(1)计算 King 所交税金DECLAREV_SHUIJIN NUMBER; -应交税金V_SAL SCOTT.EMP.SAL%TYPE; -工资C_QIZHENDIAN CONSTANT NUMBER :=3500; BEGINSELECT SAL INTO V

2、_SAL FROM SCOTT.EMP WHERE ENAME=KING;IF (V_SAL-C_QIZHENDIAN)1500 AND (V_SAL-C_QIZHENDIAN)4500 AND (V_SAL-C_QIZHENDIAN)9000 AND (V_SAL-C_QIZHENDIAN)35000 AND (V_SAL-C_QIZHENDIAN)55000 AND (V_SAL-C_QIZHENDIAN)80000 THENV_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.45-13505;END IF;DBMS_OUTPUT.PUT_LINE(KING 所交的税金是:

3、|V_SHUIJIN); END;-(2)根据员工 scott 入职的时间修改发放奖金列,大于等于 6 年的奖金为 2000,小于 6 年的奖金是 1500DECLAREV_SCOTT_HIREDATE EMP.HIREDATE%TYPE; -SCOTT 的入职时间V_COMM NUMBER; -奖金BEGINSELECT HIREDATE INTO V_SCOTT_HIREDATE FROM EMP WHERE ENAME=SCOTT;IF (SYSDATE-V_SCOTT_HIREDATE)=365*6 THENV_COMM:=2000;ELSEV_COMM:=1500;END IF;-开

4、始修改UPDATE EMP SET COMM=V_COMM WHERE ENAME=SCOTT;IF SQL%ROWCOUNT0 THENDBMS_OUTPUT.PUT_LINE(修改成功!);ELSEDBMS_OUTPUT.PUT_LINE(修改失败!);END IF; END;-(3)查询 scott 相应的工资级别并显示所在部门名称,薪水,和所在的级别DECLAREV_SCOTT_SAL EMP.SAL%TYPE; -scott 的工资V_JIBIE NUMBER; -级别V_DEPTNAME DEPT.DNAME%TYPE; -部门名称 BEGINSELECT SAL,DNAME IN

5、TO V_SCOTT_SAL,V_DEPTNAME FROM EMP E JOIN DEPT DON E.DEPTNO=D.DEPTNOWHERE ENAME=SCOTT;IF V_SCOTT_SAL700 AND V_SCOTT_SAL3200 AND V_SCOTT_SAL4400 AND V_SCOTT_SAL5000 AND V_SCOTT_SAL7000 AND V_SCOTT_SAL=10000;END LOOP; -修改 scott 的工资UPDATE EMP SET SAL=V_SCOTT_SAL WHERE ENAME=SCOTT;IF SQL%ROWCOUNT0 THEND

6、BMS_OUTPUT.PUT_LINE(增加成功!);ELSEDBMS_OUTPUT.PUT_LINE(增加失败!);END IF; END; /* 上机 2 预定义异常 公司通过 emp 表维护职员记录,用以接收职员编号并检索职员姓名,*/ DECLAREV_ENAME VARCHAR2(4); BEGINSELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=DBMS_OUTPUT.PUT_LINE(已找到|V_ENAME); EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE(对不起,没有该职员!

7、);WHEN VALUE_ERROR THENDBMS_OUTPUT.PUT_LINE(职员名称太长!);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(出现其他的异常!);END;/* 上机 3 自定义异常、|输入员工编号,工资,部门编号, |如果部门代码是 10,且工资低于 10000,更新员工的工资是 10000 |如果部门代码是 10,工资高于 10000,显示消息“工资不低于 10000” |如果部门代码不是 10 则不显示*/ DECLAREV_EMPNO EMP.EMPNO%TYPE; -员工编号V_DEPTNO EMP.DEPTNO%TYPE; -部门

8、编号V_SAL EMP.SAL%TYPE; -工资V_ENAME EMP.ENAME%TYPE; -姓名 V_V_EMPNO EMP.EMPNO%TYPE; -输入员工编号V_V_DEPTNO EMP.DEPTNO%TYPE; -输入部门编号V_V_SAL EMP.SAL%TYPE; -输入工资E_ERROR_DEPTNO EXCEPTION; -自定义异常(部门编号不是 10)E_ERROR_EMPNO EXCEPTION; -自定义异常(找不到该员工)V_COUNT NUMBER; -声明一个记录数BEGIN-输入员工编号V_EMPNO:=-输入工资V_SAL:=-输入部门编号V_DEPT

9、NO:=IF V_DEPTNO=10 THEN-在进行二次判断(输入员工编号)IF V_SAL0 THENDBMS_OUTPUT.PUT_LINE(更新成功!);ELSEDBMS_OUTPUT.PUT_LINE(更新失败!);END IF;END IF; ELSIF V_SAL10000 THENDBMS_OUTPUT.PUT_LINE(工资不低于 10000!);END IF;ELSERAISE E_ERROR_DEPTNO;END IF; EXCEPTION WHEN E_ERROR_DEPTNO THENDBMS_OUTPUT.PUT_LINE(部门代码不是 10!);WHEN OTHE

10、RS THENDBMS_OUTPUT.PUT_LINE(出现其他异常,请自行解决!);END; -SELECT * FROM EMP; DECLAREV_NAME EMP.ENAME%TYPE;E_ERROR EXCEPTION;V_COUNT NUMBER; -记录数BEGINSELECT COUNT(*) INTO V_COUNT FROM EMP WHERE EMPNO=7901;IF (V_COUNT=1) THENDBMS_OUTPUT.PUT_LINE(V_NAME);ELSERAISE E_ERROR;END IF;EXCEPTION WHEN E_ERROR THENDBMS_

11、OUTPUT.PUT_LINE(没有记录!);/*when no_data_found thenDBMS_OUTPUT.PUT_LINE(找不到!);*/END; - DECLAREV_NAME VARCHAR2(10);E_ERROR EXCEPTION; BEGINIF V_NAME IS NULL THENRAISE E_ERROR;ELSEDBMS_OUTPUT.PUT_LINE(http:/);END IF;EXCEPTION WHEN E_ERROR THENDBMS_OUTPUT.PUT_LINE(没有记录!);END;/* /上机 4 使用游标*/-(1)计算公司应交税金的总额

12、DECLAREV_SHUIJIN NUMBER; -应交税金V_SAL SCOTT.EMP.SAL%TYPE; -工资V_SUM NUMBER(10):=0; -总税金C_QIZHENDIAN CONSTANT NUMBER :=3500;CURSOR CURSOR_SAL ISSELECT SAL FROM EMP; -所有的员工的工资BEGINOPEN CURSOR_SAL; LOOPFETCH CURSOR_SAL INTO V_SAL;-把所有的工资放在 V_SAL 里面EXIT WHEN CURSOR_SAL%NOTFOUND;IF (V_SAL-C_QIZHENDIAN)1500

13、AND (V_SAL- C_QIZHENDIAN)4500 AND (V_SAL- C_QIZHENDIAN)9000 AND (V_SAL- C_QIZHENDIAN)35000 AND (V_SAL- C_QIZHENDIAN)55000 AND (V_SAL- C_QIZHENDIAN)80000 THENV_SHUIJIN:=(V_SAL-C_QIZHENDIAN)*0.45-13505;END IF;V_SUM:=V_SUM+V_SHUIJIN;END LOOP; CLOSE CURSOR_SAL; -关闭游标DBMS_OUTPUT.PUT_LINE(V_SUM); EXCEPTIO

14、N WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(出现异常!);END; -(2)根据员工入职时间修改所有员工发放奖金,大于 6 年的+2000,小于的 1500+DECLAREV_COMM EMP.COMM%TYPE; -奖金CURSOR CURSOR_EMP_COMM ISSELECT HIREDATE FROM EMP FOR UPDATE;BEGINFOR CUR1 IN CURSOR_EMP_COMM LOOPIF (SYSDATE-CUR1.HIREDATE)=365*6 THENV_COMM:=2000;ELSEV_COMM:=1500;END IF; -开始修改UPDATE EMP SET COMM=V_COMM WHERE CURRENT OF CURSOR_EMP_COMM;IF SQL%ROWCOUNT0 THENDBMS_OUTPUT.PUT_LINE(更新成功!);ELSEDBMS_OUTPUT.PUT_LINE(更新失败!);END IF;END LOOP; EXCEPTION WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(出现异常!);END; -(3)显示员工姓名,所在部门名称,薪水,所在级

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > PHP资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号