
PL/SQL经典练习
发布日期:2021-05-14 13:05:35
浏览次数:20
分类:精选文章
本文共 6410 字,大约阅读时间需要 21 分钟。
PL/SQL������������������
������������������������������
���������������
���������������������SCOTT������������������������������TEST������������
CREATE TABLE TEST.EMP AS SELECT * FROM SCOTT.EMP; CREATE TABLE TEST.DEPT AS SELECT * FROM SCOTT.DEPT;
King���������������������
������������������������������������������������������
DECLARE V_SHUIJIN NUMBER; V_SAL SCOTT.EMP.SAL%TYPE; C_QIZHENDIAN CONSTANT NUMBER := 3500; BEGIN SELECT SAL INTO V_SAL FROM SCOTT.EMP WHERE ENAME='KING'; IF (V_SAL - C_QIZHENDIAN) <= 1500 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.03 - 0; ELSIF (V_SAL - C_QIZHENDIAN) > 1500 AND (V_SAL - C_QIZHENDIAN) < 4500 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.1 - 105; ELSIF (V_SAL - C_QIZHENDIAN) > 4500 AND (V_SAL - C_QIZHENDIAN) < 9000 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.2 - 555; ELSIF (V_SAL - C_QIZHENDIAN) > 9000 AND (V_SAL - C_QIZHENDIAN) < 35000 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.25 - 1005; ELSIF (V_SAL - C_QIZHENDIAN) > 35000 AND (V_SAL - C_QIZHENDIAN) < 55000 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.3 - 2755; ELSIF (V_SAL - C_QIZHENDIAN) > 55000 AND (V_SAL - C_QIZHENDIAN) < 80000 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.35 - 5505; ELSIF (V_SAL - C_QIZHENDIAN) > 80000 THEN V_SHUIJIN := (V_SAL - C_QIZHENDIAN) * 0.45 - 13505; END IF; DBMS_OUTPUT.PUT_LINE('KING���������������������' || V_SHUIJIN); END;
���������������������������������
���������������������������������������
DECLARE V_SCOTT_HIREDATE EMP.HIREDATE%TYPE; V_COMM NUMBER; BEGIN SELECT HIREDATE INTO V_SCOTT_HIREDATE FROM EMP WHERE ENAME='SCOTT'; IF (SYSDATE - V_SCOTT_HIREDATE) >= 365 * 6 THEN V_COMM := 2000; ELSE V_COMM := 1500; END IF; UPDATE EMP SET COMM = V_COMM WHERE ENAME='SCOTT'; IF SQL%ROWCOUNT > 0 THEN DBMS_OUTPUT.PUT_LINE('���������������'); ELSE DBMS_OUTPUT.PUT_LINE('���������������'); END IF; END;
������������������
���������������������������������������������������������
DECLARE V_SCOTT_SAL EMP.SAL%TYPE; V_JIBIE NUMBER; V_DEPTNAME DEPT.DNAME%TYPE; BEGIN SELECT SAL, DNAME INTO V_SCOTT_SAL, V_DEPTNAME FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO WHERE ENAME='SCOTT'; IF V_SCOTT_SAL > 700 AND V_SCOTT_SAL <= 3200 THEN V_JIBIE := 1; ELSIF V_SCOTT_SAL > 3200 AND V_SCOTT_SAL <= 4400 THEN V_JIBIE := 2; ELSIF V_SCOTT_SAL > 4400 AND V_SCOTT_SAL <= 5000 THEN V_JIBIE := 3; ELSIF V_SCOTT_SAL > 5000 AND V_SCOTT_SAL <= 7000 THEN V_JIBIE := 4; ELSIF V_SCOTT_SAL > 7000 AND V_SCOTT_SAL <= 10000 THEN V_JIBIE := 5; END IF; DBMS_OUTPUT.PUT_LINE('SCOTT���������������������' || V_DEPTNAME || ',������������' || V_SCOTT_SAL || ',������������������������' || V_JIBIE || '������'); END;
������������������
���������������������������������������10000���
DECLARE V_SCOTT_SAL EMP.SAL%TYPE; BEGIN SELECT SAL INTO V_SCOTT_SAL FROM EMP WHERE ENAME='SCOTT'; LOOP V_SCOTT_SAL := V_SCOTT_SAL + 100; EXIT WHEN V_SCOTT_SAL >= 10000; END LOOP; UPDATE EMP SET SAL = V_SCOTT_SAL WHERE ENAME='SCOTT'; IF SQL%ROWCOUNT > 0 THEN DBMS_OUTPUT.PUT_LINE('���������������'); ELSE DBMS_OUTPUT.PUT_LINE('���������������'); END IF; END;
������������������
���������������������������������������
DECLARE V_ENAME VARCHAR2(4); E_ERROR EXCEPTION; BEGIN SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=&EMPNO; DBMS_OUTPUT.PUT_LINE('���������' || V_ENAME); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('������������������������������'); WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE('���������������������'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('������������������������'); END;
������������������
������������������������������
CREATE OR REPLACE PROCEDURE DEL_EMPNAME( ENO EMP.EMPNO%TYPE, ON_FLAG OUT NUMBER, ON_MSG OUT VARCHAR2 ) IS E_ERROR EXCEPTION; BEGIN DELETE FROM EMP WHERE EMPNO = ENO; IF SQL%NOTFOUND THEN RAISE E_ERROR; ELSE ON_FLAG := 1; ON_MSG := '���������������'; END IF; EXCEPTION WHEN E_ERROR THEN ON_FLAG := 0; ON_MSG := '���������������'; WHEN OTHERS THEN ON_FLAG := 0; ON_MSG := '���������������'; END;
DECLARE V_EMPNO NUMBER; ENO NUMBER(5); ON_FLAG NUMBER(1); ON_MSG VARCHAR(20); BEGIN ENO := &EMPNO; DEL_EMPNAME(ENO, ON_FLAG, ON_MSG); DBMS_OUTPUT.PUT_LINE(ON_FLAG); DBMS_OUTPUT.PUT_LINE(ON_MSG); END;
������������������
���������������������������������������������
CREATE OR REPLACE PROCEDURE GET_SALS( cur_salary OUT SYS_REFCURSOR, ON_FLAG OUT NUMBER, ON_MSG OUT VARCHAR2 ) IS BEGIN OPEN cur_salary FOR SELECT empno, sal FROM employee; ON_FLAG := 1; ON_MSG := '������'; EXCEPTION WHEN OTHERS THEN ON_FLAG := -1; ON_MSG := '������������������������������������'; END; DECLARE v_empno EMP.EMPNO%TYPE; v_sal EMP.SAL%TYPE; emp_salary SYS_REFCURSOR; on_Flag NUMBER(1); os_Msg VARCHAR2(200); BEGIN 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; ELSE DBMS_OUTPUT.PUT_LINE(os_Msg); END IF; IF emp_salary%ISOPEN THEN CLOSE emp_salary; END IF; END;
发表评论
最新留言
很好
[***.229.124.182]2025年04月26日 04时50分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java并发工具篇
2021-05-13
京喜小程序体验评分优化实践
2021-05-13
C#中文转换成拼音
2021-05-13
C#批量上传图片
2021-05-13
pyhon中安装win32com模块
2021-05-13
C++错误笔记
2021-05-13
【无线通信模块】GPRS DTU不稳定和容易掉线原因
2021-05-13
CSS(六)|页面布局之定位
2021-05-13
比特币(BSV)知识库:身份-BSVAlias
2021-05-13
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2021-05-13
国标流媒体服务器以ROOT身份运行提示“permission denide”报错解决
2021-05-13
qt中转到槽后如何取消信号与槽关联
2021-05-13
qt问题记录-spin box与double spin box
2021-05-13
移动端事件
2021-05-13
css 图片按比例缩放
2021-05-13
小程序form表单里面buton点击事件失效
2021-05-13
微信小程序placeholder设置自定义样式
2021-05-13