oracle期末试卷

更新时间:2024-05-07 09:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

:名姓 线 : 号 学 订 : 号 班 学 教 装 :业专级年西华大学课程考核试题卷 ( A卷)

试卷编号:

( 20_14_ 至 20_15___ 学年 第__2__学期 )

课程名称:Oracle数据库开发技术 考试时间: 110 分钟 课程代码: 106086759 试卷总分: 100 分 考试形式: 机考 学生自带普通计算器: 否

所有文件存盘路径均为D:\\DJ

1)请将考试文件夹下的 学号_答案.doc 文件的学号二字改为你的学号。

2)请将每个题的源代码复制到文件 学号_答案.doc 文件中,考试结束后请将 学号_答案.doc上传。

3) Oracle数据库服务器的IP为10.36.1.6,端口:1521,数据库实例名为ORCL, 考生的数据库账号和密码均为考生学号。

4) 在考试文件夹下有一个数据库脚本文件db.sql,请用你的账号连接到数据库服务器,运行该脚本文件,建立相应的数据库对象。

注意:在填答本试卷之前,请先执行给定的数据库脚本以确保数据正确导入。

一、请使用SQL语句完成下列操作,并将操作命令和结果截图填写/拷贝在答题卷相应位置。(每小题2分,共30分)

(1) 查询所有员工的员工号、员工名与该数据在数据库中的物理地址 Select empno, ename, rowid from emp;

(2) 查询所有员工的员工名,员位与雇用日期,并且将查询的结果分别指定别名“员工名”,“员位”,“工作日期”

Select ename as 姓名 ,job as 职位,hiredate as 工作日期 from emp;

(3) 查询所有的工作种类(要求不重复) Select distinct job from emp;

(4) 查询所有姓名以S开头的员工的姓名,工种,及工资,并且按工资的降序排序。 select ename, sal from emp where ename like 'S%' order by sal desc ;

(5) 向dept表中插入一条记录:部门号50,部门名:“IM”,部门地址:“dalian” INSERT INTO dept VALUES(50, 'IM', 'dalian');

(6) 查询所有员工的员工姓名及其上司的姓名。 SELECT worker.ename, manager.ename FROM emp worker JOIN emp manager

ON worker.mgr=manager.empno;(查询经理信息)

(7) 查询10号部门的部门名、员工号、员工名和所有其他部门的名称 SELECT empno,ename,emp.deptno,dname

第 1 页 共 6 页

FROM scott.emp right JOIN scott.dept

ON scott.emp.deptno=10 AND scott.emp.deptno=dept.deptno;

(8) 查询比10号部门所有员工工资高的员工姓名,所在部门及工资。 SELECT ename,sal,dname FROM emp,dept

WHERE sal>all(select sal from emp where deptno=10);

(9) 查询与10号部门某个员工工资相同,工种也与10号部门的某个员工相同的员工的信息。

select empno,ename,sal,job from emp

where sal in(select sal from emp where deptno=10) and job in (select job from emp where deptno=10); (10) 查询比本部门平均工资高的员工信息 select empno,ename,sal from emp e

where sal>(select avg(sal) from emp where deptno=e.deptno);

(11) 查询各个部门号、部门名、部门人数及部门平均工资。 select dept.deptno,dname,d.amount,d.avgsal

from dept,(select deptno,count(*) amount,avg(sal) avgsal from emp group by deptno)d where dept.deptno=d.deptno;

(12) 创建emp_salary,表中的字段有部门号,部门最高工资,部门最低工资,并设定部门号为主键。

CREATE TABLE emp_salary(

deptno NUMBER(5) PRIMARY KEY, maxsalary number(5), minsalary number(5) );

(13) 统计各个部门的部门号、部门最高工资和最低工资,并将统计的结果写入到表emp_salary中。

INSERT INTO emp_salary

SELECT deptno,max(sal),min(sal) FROM emp GROUP BY deptno;

(14) 向emp表中插入一行记录,其员工名为xihua,员工号为1235,其他信息与员工名为SCOTT的员工信息相同。 insert into emp

select 1235,'xihua',job,mgr,hiredate,sal,comm,deptno from emp where ename='SCOTT';

(15) 为30号部门每位员工增加工资,增加的工资为10号部门所有员工的平均工资的一半。

第 2 页 共 3 页

二.Oracle操作命令题(每小题2分,共30分) 请在答题卷中写出下列操作对应的Oracle命令。 (1) 启动oracleservicestudy服务。 Net start oracleservice teach (2) 立即关闭数据库

Shutdown immediate

(3) 从服务器端参数文件启动数据库至mount阶段

Startup mount

(4) 使用show 命令查询参数db_name

Show db_name

(5) 查询scott.emp表的表结构

Desc scott.emp

(6) 为用户hr解锁

Alter user hr account unlock

(7) 为用户hr设置密码为hr2015

Alter user hr identified by hr2015

(8) 修改参数shared_pool_size为58m,并且所做的修改在当前和以后都永久生效。

(9) 把屏幕结果保存到c:\\screen.txt文件中

(10) 将sqlplus 提示符:”SQL>”改成当前”用户名>” 例如:sys> Set sqlprompt ‘_user>’

(11) 创建一个名为xihua的用户模式,且密码为xihua2015 create user xihua identified by xihua2015; (12) 为xihua用户赋予创建会话的权限 GRANT CREATE SESSION TO xihua (13) 查询scott用户创建的所有的表

(14) 查询命令show的语法

(15) 使当前数据库处于静默状态 Alter system quiesce restricted;

三、编程题(本大题共5小题,每小题8分,总计40分) 要求:请将程序代码及程序结果截图粘贴到答题卷对应位置。 1. 编程实现查询雇员编号为7369的雇员姓名,工种和工资。 SET SERVEROUTPUT ON

DECLARE --定义部分标识

v_name VARCHAR2(10); --定义字符串变量v_name v_sal NUMBER(5); --定义数值变量v_sal v_job varchar2(10);

BEGIN --可执行部分标识 SELECT ename,sal,job INTO v_name,v_sal,v_job FROM scott.emp

WHERE empno=7788; --在程序中插入的SQL语句

DBMS_OUTPUT.PUT_LINE('7788号雇员是:'||v_name||',工资为:'||to_char(v_sal)||’,工

第 3 页 共 3 页

种为:‘||v_job); --输出雇员名和工资 END; /

2. 显示工资最高的前5名员工的工号,姓名和部门及工资。 ,

3. 修改所有雇员的工资,修改后的工资控制在6000~7000之间,超出此范围则维持原工资。

set serveroutput on declare

v_sal NUMBER(7,2);

--v_empno VARCHAR2(10); new_sal NUMBER(7,2);

cursor newn is select * from emp; begin

for i in newn loop v_sal:=i.sal;

new_sal:=i.sal*1.01;

update scott.emp set sal=new_sal where empno=i.empno; if new_sal<6000 then

dbms_output.put_line('员工号为:'||i.empno||'工资小于6000不能修改'); --raise_application_error(-20001,'新工资小于6000不能修改'); rollback;

elsif new_sal>7000 then rollback;

dbms_output.put_line('员工号为:'||i.empno||'工资大于于7000不能修改'); else

dbms_output.put_line('员工号为:'||i.empno||'原工资'||v_sal||'新工资'||new_sal||'修改成功');

commit; end if; end loop; end; /

4. 创建显示雇员总人数的存储过程EMP_COUNT及显示雇员信息的存储过程EMP_LIST,并在EMP_LIST中引用EMP_COUNT存储过程来显示员工总人数。 CREATE OR REPLACE PROCEDURE EMP_COUNT AS

V_TOTAL NUMBER(10); BEGIN

SELECT COUNT(*) INTO V_TOTAL FROM EMP; DBMS_OUTPUT.PUT_LINE(' 雇员总人数为: '||V_TOTAL); END; /

第 4 页 共 3 页

CREATE OR REPLACE PROCEDURE EMP_LIST AS

CURSOR emp_cursor IS SELECT empno,ename FROM scott.emp; BEGIN

FOR Emp_record IN emp_cursor LOOP

DBMS_OUTPUT.PUT_LINE(Emp_record.empno||Emp_record.ename); END LOOP; EMP_COUNT; END; /

5. 创建管理雇员信息的包PK_EMP,它具有显示雇员信息(公有过程名:EMP_LIST),插入雇员(公有过程名:INSERT_EMP)、修改雇员所在部门(公有过程名:CHANGE_EMP_DEPT)及删除雇员(公有过程名:DELETE_EMP)的功能。

CREATE OR REPLACE PACKAGE PK_EMP --包头部分 IS --公有过程或函数 PROCEDURE EMP_LIST; PROCEDURE INSERT_EMP;

PROCEDURE CHANGE_EMP_DEPT (P_NEWdept VARCHAR2); PROCEDURE DELETE_EMP(empno varchar2); END EMPLOYE;

CREATE OR REPLACE PACKAGE BODY EMPLOYE IS

EMPLOYE EMP%ROWTYPE;

-------------- 显示雇员信息----------------- PROCEDURE EMP_LIST AS BEGIN

DBMS_OUTPUT.PUT_LINE('----- 雇员信息-----’);

DBMS_OUTPUT.PUT_LINE('雇员编号:'||EMPLOYE.EMPNO); DBMS_OUTPUT.PUT_LINE('雇员名称:'||EMPLOYE.ENAME); DBMS_OUTPUT.PUT_LINE(' 雇员职务:'||EMPLOYE.JOB); DBMS_OUTPUT.PUT_LINE(' 雇员工资:'||EMPLOYE.SAL); DBMS_OUTPUT.PUT_LINE('部门编号:'||EMPLOYE.DEPTNO); END SHOW_DETAIL;

---------------------- 插入雇员到EMP表------------------ --------

---------------------------- 修改雇员所在部门------------------ --------

PROCEDURE CHANGE_EMP_DEPT (P_NEWdept NUMBER) AS BEGIN

第 5 页 共 3 页

EMPLOYE.dept:=P_NEWdept;

DBMS_OUTPUT.PUT_LINE('修改部门完成!'); END CHANGE_EMP_DEPT; --------删除雇员------------

PROCEDURE DELETE_EMP(empno varchar2) AS BEGIN

Delete from emp where empno=p_empno;

DBMS_OUTPUT.PUT_LINE('删除雇员完成!'); End delete_emp; END EMPLOYE;

第 6 页 共 3 页

本文来源:https://www.bwwdw.com/article/k9xg.html

Top