答案实验五:Oracle编程(一)
更新时间:2024-03-02 11:58:01 阅读量: 综合文库 文档下载
《Oracle技术》实验报告(五)
成绩 实验名称 Oracle编程(一) 姓名 实验 学号 班级 (1)熟练掌握编写和调试PL/SQL块的方法。 (2)熟练掌握编写和调试存储过程方法。 (3)熟练掌握编写和调试函数方法。 目的 (4)熟练掌握各种控制结构语句的使用。 (1) 编写一个PL/SQL块,输出emp表中所有员工的员工名、员工号、工资和部门号。 BEGIN FOR v_emp IN (SELECT * FROM EMP) LOOP DBMS_OUTPUT.PUT_LINE(v_emp.ename||’ ‘|| 实 验 内 容 v_emp.empno|| ’ ‘||v_emp.sal||’ ‘|| v_emp.deptno); END LOOP; END; / (2) 创建一个存储过程,以员工号为参数,输出该员工的工资。 (提示:如果不存在该员工,则显示“员工号不存在” ) CREATE OR REPLACE PROCEDURE OUTPUT_SAL(p_empno emp.empno%type) AS V_sal emp.sal%type; BEGIN SELECT sal INTO v_sal FROM emp WHERE empno=p_empno; DBMS_OUTPUT.PUT_LINE(v_sal); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(‘员工号不存在’); END; (3) 编写一个PL/SQL块,查询名为“SMITH”的员工信息,并输
出其员工号、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2007,员工名为“SMITH”,工资为1500,部门号为10。如果存在多个名为“SMITH”的员工,则输出所有名为“SMITH”的员工号、工资和部门号。(提示:要使用
NO_DATE_FOUND和TOO_MANY_ROWS两个异常。) DECLARE
V_empno emp.empno%type; V_sal emp.sal%type;
V_deptno emp.deptno%type; BEGIN
SELECT empno,sal,deptno INTO
V_empno,v_sal,v_deptno FROM emp WHERE ename=’SMITH’;
DBMS_OUTPUT.PUT_LINE(v_empno||’ ’||v_sal||’ ’||v_dept
no);
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO EMP(empno, ename,sal,deptno) VALUES(2007,’SMITH’,1500,10);
WHEN TOO_MANY_ROWS THEN
FOR v_emp IN (SELECT empno,sal,deptno FROM emp WHERE ename=’SMITH’) LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.empno||’ ‘|| v_emp.sal|| ’ ‘||v_emp.deptno); END LOOP; END; /
(4) 创建一个存储过程,以部门号为参数,输出该部门入职日期最
早的员工姓名。
(提示:如果不存在该部门,则显示“无此部门或此部门无员工!” ) CREATE OR REPLACE PROCEDURE CC(p_deptno emp.deptno%type) AS
V_ename emp.ename%type; BEGIN
select ename into v_ename from emp where deptno=p_deptno
and hiredate=(select min(hiredate) from emp where deptno=p_deptno);
DBMS_OUTPUT.PUT_LINE(v_ename); exception
when no_data_found then
DBMS_OUTPUT.PUT_LINE('无此部门或此部门没有员工!'); END;
(5) 创建一个函数,以员工号为参数,返回该员工的工资。
CREATE OR REPLACE FUNCTION RET_SAL(p_empno emp.empno%type) RETURN emp.sal%type AS
v_sal emp.sal%type; BEGIN
SELECT sal INTO v_sal FROM emp WHERE empno=p_empno; RETURN v_sal; EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN -1; END;
/
(6) 编写一个PL/SQL块调用(5)中创建的函数。如果不存在该
员工,则显示“员工号不存在!”。
命令: DECLARE
V_empno emp.deptno%type; V_sal emp.sal%type; BEGIN
V_empno:=&x;
V_sal:=ret_sal(v_empno); If v_sal=-1 then
DBMS_OUTPUT.PUT_LINE(’员工号不存在’); Else
DBMS_OUTPUT.PUT_LINE(v_sal); End if; END; /
实 验 内 容
(7) 创建一个函数,以部门号为参数,返回该部门的平均工资。
CREATE OR REPLACE FUNCTION RET_AVGSAL(p_deptno emp.deptno%type) RETURN emp.sal%type AS
v_avgsal emp.sal%type; BEGIN
SELECT avg(sal) INTO v_avgsal FROM emp WHERE deptno=p_deptno;
IF v_avgsal IS NULL THEN RETURN -1; ELSE
RETURN v_avgsal; END IF; END; / (8) 编写一个PL/SQL块调用(7)中创建的函数。如果不存在该
部门,则显示“部门号不存在!”。 DECLARE
V_deptno emp.deptno%type; V_avgsal emp.sal%type; BEGIN
V_deptno:=&x;
V_avgsal:=ret_avgsal(v_deptno); If v_avgsal=-1 then
DBMS_OUTPUT.PUT_LINE(’部门号不存在!’); Else DBMS_OUTPUT.PUT_LINE(v_avgsal)); End if; END; /
(9) 创建一个函数,以员工号为参数,返回该员工所在部门的平
均工资。
CREATE OR REPLACE FUNCTION
RET_AVGSAL_EMPNO(p_empno emp.empno%type) RETURN emp.sal%type AS
v_deptno emp.deptno%type; v_avgsal emp.sal%type;
BEGIN
SELECT deptno INTO v_deptno FROM emp WHERE empno=p_empno;
SELECT avg(sal) INTO v_avgsal FROM emp
WHERE deptno=v_deptno;
RETURN v_avgsal;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN -1;
END;
/
(10)编写一个PL/SQL块调用(9)中创建的函数。如果不存在该
部门,则显示“员工号不存在!”。
DECLARE
V_empno emp.empno%type;v_avgsal emp.sal%type; BEGIN
V_empno:=&x;
V_avgsal:= RET_AVGSAL_EMPNO(v_empno);
If v_avgsal=-1 then
DBMS_OUTPUT.PUT_LINE(‘员工号不存在!’);
Else
DBMS_OUTPUT.PUT_LINE(v_avgsal);
End if;
END; /
(11)创建一个存储过程,以一个整数为参数,输出工资最高的前
几个(参数值)员工的姓名。
CREATE OR REPLACE PROCEDURE max_n(p_n int) AS v_i int:=1; BEGIN
for v_emp in (SELECT * FROM emp ORDER BY sal desc) loop
DBMS_OUTPUT.PUT_LINE(v_emp.ename);
Exit when v_i=p_n;
v_i:=v_i+1;
end loop; END; /
(12)创建一个存储过程,以两个整数为参数,输出工资排序在两个参数之间的员工姓名。
CREATE OR REPLACE PROCEDURE min_max(p_m int,p_n int) AS
v_i int:=1; BEGIN
for v_emp in (SELECT * FROM emp where sal between p_m and p_n ORDER BY sal) loop
DBMS_OUTPUT.PUT_LINE(v_emp.ename||' '||v_emp.sal); end loop; END; /
end loop; END; /
(12)创建一个存储过程,以两个整数为参数,输出工资排序在两个参数之间的员工姓名。
CREATE OR REPLACE PROCEDURE min_max(p_m int,p_n int) AS
v_i int:=1; BEGIN
for v_emp in (SELECT * FROM emp where sal between p_m and p_n ORDER BY sal) loop
DBMS_OUTPUT.PUT_LINE(v_emp.ename||' '||v_emp.sal); end loop; END; /
正在阅读:
答案实验五:Oracle编程(一)03-02
优美散文:离开的日子11-21
2010年广东高考语文试题文字版(A卷)07-09
卫生健康委会第三季度工作开展情况总结报告08-04
当今中国应该居安思危10-05
安庆长江铁路大桥主桥上部结构施工关键技术08-18
LI-6400便携式光合仪使用流程说明(个人总结)01-05
地质调查与找矿毕业论文01-06
汽车的广告销售广告词大全04-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 答案
- 编程
- 实验
- Oracle