经典PLSQL培训示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、数据库操作

(1)建立SDD用户,默认表空间为SDD,授权给SDD用户对数据库中的表进行增删改查;

CREATE TABLESPACE SDD

DATAFILE'D:\oracle\product\10.2.0\oradata\orcl\SDD.dbf'

SIZE50M

AUTOEXTEND ON

NEXT50M MAXSIZE20480M

EXTENT MANAGEMENT LOCAL;

CREATE USER SDD IDENTIFIED BY "SDD"

DEFAULT TABLESPACE SDD

QUOTA UNLIMITED ON SDD;

GRANT INSERT,DELETE,UPDATE,SELECT ON SCOTT.EMP TO SDD;

(2)按数据结构要求,建立员工信息表、部门信息表,要求存放在SDD表空间下,将scott 用户下emp、dept表的数据复制到当前用户下;

CREATE TABLE EMP AS SELECT * FROM SCOTT.EMP;

CREATE TABLE DEPT AS SELECT * FROM SCOTT.DEPT;

(3)使用sql*plus登录数据库,导出员工信息表、部门信息表的表结构及数据,分别导出到文件bak.dmp,导入到当前用户下。

exp scott/tiger@orcl file=d:/bak.dmp tables=(emp,dept);

imp sdd/sdd@orcl file=d:/bak.dmp ignore=y full=y;

(4)给部门信息表增加主键,以部门编号为主键。

ALTER TABLE DEPT ADD CONSTRAINT PK_DEPTNO PRIMARY KEY(DEPTNO);

(5)建立SDDTMP用户,授权对SDD用户下emp表的查询功能;

CREATE USER SDDTMP IDENTIFIED BY "SDDTMP";

GRANT CONNECT TOSDDTMP;

GRANT SELECT ON SDD.EMP TO SDDTMP;

2、常用查询

(1)按部门分组查询员工基本信息;

SELECT * FROM EMP

WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP)

ORDER BY DEPTNO;

(2)查询research部门下工资最高的人;

SELECT * FROM EMP,DEPT

WHERE SAL=(SELECT MAX(SAL)

FROM EMP,DEPT

WHERE EMP.DEPTNO=DEPT.DEPTNO AND DNAME='RESEARCH')

AND EMP.DEPTNO=DEPT.DEPTNO AND DNAME='RESEARCH';

(3)展示每个部门收入排名前三位的员工信息(员工编号、员工姓名、部门名称、收入总和),收入=工资+通讯费;

SELECT ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL+NVL(COMM,0) DESC) NO,E.* FROM EMP E;

(4)展示所有通讯费为空的员工信息(员工编号、员工姓名);

SELECT * FROM EMP WHERE COMM IS NULL;

(5)统计出平均工资高于3000的部门有哪些;

SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING(AVG(SAL))>3000;

(6)统计在1981年4月至9月间入职了多少员工;

SELECT COUNT(*) FROM EMP

WHERE HIREDATE BETWEEN TO_DATE(19810401,'YYYY-MM-DD')

AND TO_DATE(19810930,'YYYY-MM-DD');

(7)共有多少名姓名以“S”开头的员工;

SELECT COUNT(*) FROM EMP WHERE ENAME LIKE'S%';

(8)统计员工人数高于各部门平均人数的部门;

SELECT DEPTNO, COUNT(*) FROM EMP

GROUP BY DEPTNO

HAVING(COUNT(*))>(SELECT COUNT(*)/4FROM EMP);

(9)实现依据员工编号查询出所有上级信息的功能(注意,不仅直接主管);

这里以查询员工编号为7369的员工为例:

SELECT * FROM EMP

WHERE EMPNO!=7369START WITH EMPNO= 7369

CONNECT BY PRIOR MGR= EMPNO;

(10)实现依据员工编号查询出所有下级信息的功能(注意,不仅直属下级)。

这里以员工编号为7839的员工为例:

SELECT * FROM EMP

WHERE EMPNO!=7839START WITH EMPNO=7839

CONNECT BY PRIOR EMPNO=MGR;

3、程序设计I

CREATE OR REPLACE PACKAGE BODY PKG_JZ IS

/*------------------------------------------------------------------------- || 过程名称:PRC_查询个人信息

|| 参数描述:参数标识名称输入/输出类型

||-------------------------------------------------------------

|| NO 编号输入 NUMBER

|| prm_ErrorMsg 出错信息输出 VARCHAR2

||

|| 作者:金泽完成日期:2011-08-31

||---------------------------------------------------------------------*/ PROCEDURE PRC_查询个人信息(PRM_EMPNO IN NUMBER,

PRM_ERRORMSG OUT VARCHAR2) IS

V_EMPNO EMP.EMPNO%TYPE;

V_ENAME EMP.ENAME%TYPE;

V_SAL EMP.SAL%TYPE;

V_COMM M%TYPE;

V_JOB EMP.JOB%TYPE;

V_HIREDATE EMP.HIREDATE%TYPE;

V_DNAME DEPT.DNAME%TYPE;

相关文档
最新文档