oracle期末考试参考答案_奇迹是执着的人创造的的博客-程序员宅基地

技术标签: oracle  # oracle  数据库  sql  

刚刚考完,参考答案,欢迎斧正!

A,B相同的准备工作

准备工作: 开两个cmd
其中一个: sqlplus sys/123456 as sysdba;
                  alter user scott account unlock;
另一个:
                  sqlplus scott/tiger;
 

A卷题解

1.请完成以下sqlplus的设置并按要求保存代码和截图(20分,每小题4分)

scott用户下
(1)设置sql的提示符为你的姓名,如张三>>

set sqlprompt 张三>>;


(2)设置每行100个字符,每页18行

set linesize 100
set pagesize 18


(3)查看scott用户的dept表,并将该内容存入my_1.sql;

select * from dept;
save my_1

默认在主目录下,不用写路径


(4)执行my_1.sql文件

@my_1


(5)查看emp表对象的结构信息

desc emp;


2.请完成以下基本操作,并按要求保存代码和截图(此题50分,前4小题每小题5分,第5小题30分)

--sys用户窗口下  方便分辨sys还是普通用户,下面管理员的SQL>提示就不改了
(1)创建一个普通用户,要求以自己的姓名的全拼命名,如:zhangsan,密码为123

create user zhangsan identified by 123;


(2)创建角色student_role,并使之具备创建表、创建视图、创建存储过程、创建触发器的权限

create role student_role;
grant create table,create view,create procedure,create trigger to student_role;


(3)将用户角色student_role和创建会话权限授权给刚建立的用户zhangsan,将查询scott用户下的emp权限授给zhangsan

grant student_role,create session to zhangsan;
grant select on scott.emp to zhangsan;


(4)修改zhangsan用户,让其默认表空间为users,并且表空间配额20m

alter user zhangsan
    default tablespace users
    quota 20m on users;


(5)连接到zhangsan用户,并解锁。并在该用户下完成:

conn zhangsan/123;

①建立数据表stu_emp,stu_dept,要求该表为scott用户下的emp表、dept表的备份
--先要授予对dept表的select权限

grant select on scott.dept to zhangsan;


--复制表 回到zhangsan用户窗口

create table stu_emp as select * from scott.emp;
create table stu_dept as select * from scott.dept;

②查询每位员工的实际工资(工资+津贴)

select ename 姓名,sal+nvl(comm,0) 实际工资 from stu_emp;

③查询比部门号为10号的平均工资高的人数

select count(empno) from stu_emp where sal>(select avg(sal) from stu_emp where deptno=10);

④创建视图view_detaliled,用于查看每个员工的编号,姓名以及所在城市

create view view_detaliled as 
	select empno,ename,loc from stu_emp,stu_dept 
	where stu_emp.deptno=stu_dept.deptno;

⑤对视图view_detaliled插入一条数据(1010,jack,北京).若能成功请查询相关数据,若不能成功,说明原因。

insert into view_detaliled values(1010,'jack','北京');

不能插入成功,因为视图一般由多个基表组成的逻辑结构,一般不允许直接进行dml(update,insert,delete)操作。
因为对视图的操作其实是对组成视图的好多个基本表的操作,直接dml操作视图可能破坏表与表之间的完整性约束等。
比如上面的例子,其实是分别向stu_emp插入(1010)和向表stu_dept插入('jack','北京')。很明显,dept表的新插入
记录缺少主键数据,不可能让你插入成功的。
此时想要直接对视图进行dml操作,需要写一个关于该视图的替换触发器,在触发器内实现对各个基本表的dml操作

3.创建一个存储过程stu_proc并执行。要求:以员工编号为参数,返回该员工的姓名和工资,若工资低于3000,则报错,
说明工资低于国家最低工资水平

create procedure stu_proc(
        var_empno in stu_emp.empno%type,
        var_ename out stu_emp.ename%type,
        var_sal out stu_emp.sal%type
    ) as
begin
    select ename,sal into var_ename,var_sal from stu_emp where empno=var_empno;
    if var_sal<3000 then
        dbms_output.put_line('工资低于国家最低工资水平');
    end if;
end;
/

--执行

set serveroutput on;
declare
    var_empno stu_emp.empno%type;
    var_ename stu_emp.ename%type;
    var_sal stu_emp.sal%type;
begin
    var_empno:=&no;
    stu_proc(var_empno,var_ename,var_sal);
    dbms_output.put_line('姓名:'||var_ename||' 工资:'||var_sal);
end;
/


4.声明一个带输入参数(部门号)的显式游标cur_sel,根据参数传递来查询每位员工的姓名和所在城市

declare
	cursor cur_sel(var_deptno stu_dept.deptno%type) is
		select ename,loc from stu_dept,stu_emp 
		where stu_dept.deptno=stu_emp.deptno and stu_dept.deptno=var_deptno;
	var_no stu_dept.deptno%type;
begin
	var_no:=&no;
	dbms_output.put_line(var_no||'号员工的相关信息如下');
	for emp_record in cur_sel(var_no) loop
		dbms_output.put_line(emp_record.ename||'住在'||emp_record.loc);
	end loop;
end;
/

考试时不知道时间。。总感觉我们时间分配少了。。做这题时就剩下10min了,急的要死。。然后多写了一个cursor前create,卡住了,竟然当时方的不会改。。差点没完卷,考试提交版本如下:

declare
	cursor cur_sel(var_deptno stu_dept.deptno%type) is
		select ename,loc from stu_dept,stu_emp 
		where stu_dept.deptno=stu_emp.deptno and stu_dept.deptno=var_deptno;
begin
	for emp_record in cur_sel(10) loop
		dbms_output.put_line(emp_record.ename||'住在'||emp_record.loc);
	end loop;
end;
/

5.详细阐述oracle的体系结构(10分)

 

B卷题解

1.sqlplus环境设置(20分,每小题4分)
(1)设置每行120个字符,设置每页20行

set linesize 120
set pagesize 20



(2)设置sql的提示符为你的名字,如李四>>

set sqlprompt 李四>>


 

(3)查看scott用户下emp表信息

select * from emp;


 

(4)my.sql文件,实现在scott用户下emp表中查询工作是SALESMAN的所有职工的姓名
工资,要求姓名,工资字段分别格式化成a10,$999,999.00
在D盘根目录下新建文件my.sql 写下如下代码:
--my.sql

col ename for a10
col sal for $999,999.00
select ename,sal from emp where job='SALESMAN';


(5)执行my.sql

@ D:\my


2.请完成以下基本操作,并按要求保存代码和截图(此题50分,每小题5分)
--管理员窗口
(1)创建一个普通用户,要求以自己的姓名的全拼写命名,如:lisi,密码:abc

create user lisi identified by abc;


 

(2)创建角色myrole,并使之具备创建表,创建视图,创建触发器,存储过程的权限

create role myrole;
grant create table,create view,create trigger,create procedure to myrole;


 

(3)将用户角色myrole和连接权限授给刚建立的用户lisi

grant myrole,connect to lisi;


 

(4)将访问scott用户下的emp的权限授权给lisi

grant select on scott.emp to lisi;


 

(5)修改lisi用户,让其默认表空间为users,并且表空间配额5m

alter user lisi 
    default tablespace users
    quota 5m on users;


 

(6)连接到lisi用户,并且在该用户下完成
--普通用户窗口切换到 lisi用户

conn lisi/abc

①建立数据表my_emp/my_dept,分别为scott用户下的emp,dept表的备份
--先要授予对dept表的select权限  sys窗口

grant select on scott.dept to lisi;


 

--复制表 回到lisi用户窗口

create table my_emp as select * from scott.emp;
create table my_dept as select * from scott.dept;

②列出所有"CLERK"(办事员)的姓名及其部门名称

select ename,dname from my_emp,my_dept where my_emp.deptno=my_dept.deptno and job='CLERK';

③列出薪水比"SMITH"多的所有员工

select * from my_emp where sal>(select sal from my_emp where ename='SMITH');

④找出在(任何年份的)2月受聘的所有员工

select * from my_emp where to_char(hiredate,'mm')=2;

⑤查询各种工作的最低工资

select job 工作,min(sal) 最低工资 from my_emp group by job;


 

3.scott模式中使用隐式游标for循环,用于实现根据部门号查询员工姓名和工作(10分)

conn scott/tiger;
set serveroutput on;
declare
	var_deptno emp.deptno%type;
begin
	var_deptno:=&no;
	dbms_output.put_line(var_deptno||'号部门的相关信息如下');
	for emp_record in (select ename,job from emp where deptno=var_deptno) loop
		dbms_output.put_line('姓名:'||emp_record.ename||' 工作:'||emp_record.job);
	end loop;
end;
/



4.写一个pl/sql存储过程。根据scott模式下的emp表,写一个带参数的存储过程proc(deptno in number,sum_sal out number),
输入部门编号,输出该部门的总工资信息,并写一个pl/sql程序块,测试该存储过程(10分)

--过程

create or replace procedure proc(var_deptno in number,sum_sal out number) as
begin
	select sum(sal) into sum_sal from emp where deptno=var_deptno;
end;
/

--执行

declare
	var_deptno number;
	var_sumSal number;
begin
	var_deptno:=&no;
	proc(var_deptno,var_sumSal);
	dbms_output.put_line(var_deptno||'号部门的总工资为:'||var_sumSal);
end;
/

    


5.说明oracle逻辑结构和物理结构的构成

(安工程,依芸芸&李臣龙oracle班)

总的来说。。一如既往。。简单 。。就是有些题意可能有歧义,A卷存储过程那题"以员工编号为参数,返回该员工的姓名和工资,若工资低于3000,"姓名和工资要写成输出参数。。亲口问老师的。。

还有就是时间。。。考完前10分钟才知道总时长只有。。。。。

参考答案,欢迎斧正,给下届乘凉!

还有,以后打死不写学校考试有关的博客了。。。。后辈子弟也不要写了。。太无耻!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hza419763578/article/details/91043550

智能推荐

国土GIS应用专题(一)-程序员宅基地

2018年一月份国土部发布了关于第三次土地调查的总体方案,为了不跑偏轨道,就国土方面GIS的应用与实践略提一二。(上图来源于国土部官网)目前GIS在国土行业中的应用有:土地利用变化、地籍管理、土地规划、土地确权以及数据管理等方面,所涉及数据包括行政边界和地貌等基础地理信息、土地利用分类数据、地籍数据、规划数据、开发整理以及复垦数据等。该专题主要利用对后台数据可以进行处理的ArcMap(当然...

Minor GC 和 Full GC 的触发条件_parallel触发 fullgc-程序员宅基地

如题,不过首先需要对 GC 做一个统一的定义,这里引用 《深入理解 Java 虚拟机》中的介绍:部分收集(Partial GC):指目标不是完整收集整个 Java 堆的垃圾收集,其中又分为:新生代收集(Minor GC/Young GC):指目标知识新生代的垃圾收集。老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集器。目前只有 CMS 收集器会有单独收集老年代的行为。另外请注意“Major GC”这个说法现在有点混淆,在不同资料上常有不同所指,需按上下文区别分别到底是指老_parallel触发 fullgc

css关于/deep/的解释和用法_cscc deep-程序员宅基地

/deep/的意思大概为深入的,深远的。无意中看到css中有关于这种写法,开始没太注意 ,以为是组件css的写法,后来才发现不是。我们都知道Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范。这样在打包的时候会生成一个独一无二hash值,这样父组件的样式就不会影响到子组件了,然后你要想修改子组件的样式,一般是提取一个公共文件,在公共文件里面修改样式,但是这样也存..._cscc deep

匿名无人机代码FlightCtrl简单分析_无人机一键起飞代码-程序员宅基地

这个flightCtrl文件,是真的很长又很难。。。各种标志位啊,判断啊,开关啊,逻辑判断啊什么的,趁通宵把代码梳理一遍。这个文件里的函数虽不算最多,但引用的头文件相当多,也就是说这个东西跟整个系统各个部分都有关系,难度也就最大。。。不过仔细看应该还是能看懂的,就是费点时间。1、pid初始化:void All_PID_Init(void){ Att_1level_PID_Init();..._无人机一键起飞代码

python系列之:读取json文件转化为字典,再保存为json文件_json读出字典_最笨的羊羊的博客-程序员宅基地

python系列之:读取json文件转化为字典,再保存为json文件open(filename,‘r’,encoding=‘utf-8’):打开json文件json.load:json转化为字典json.dumps:字典转化为jsondata.get(键):获取字典的值update({键:值}):更新字典def addAccount(filename,databaseName,accountName,passwd): with open(f"/data/conf_passwd_ser_json读出字典

十六进制颜色透明度转换_透明度16进制转换_小小小晓蓉的博客-程序员宅基地

感谢「平凡的程序员」的原创文章:https://blog.csdn.net/yuanjian19900610/article/details/100285395八位十六进制依次代表红色(Red)、绿色(Green)、蓝色(Blue)、透明度(Alpha)透明度转换方便自己找0 —> 0X001 —> 0X032 —> 0X053 —> 0X084 —> 0X0A5 —> 0X0D6 —> 0X0F7 —> 0X128 —> 0X1_透明度16进制转换

随便推点

SqlBulkCopy插入1亿条数据需要20分钟?-程序员宅基地

为什么80%的码农都做不了架构师?>>> ..._sql 复制上亿数据需要多久

mysql配置文件-程序员宅基地

mysql配置文件mysql配置文件mysql配置文件针对于Mysql 8.0.11放在resources目录下:配置文件名称为:jdbcConfig.propertiesdriver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/wuxudong?useUnicode=true&characterEncoding...

Angular 5 子组件与父组件实现数据双向绑定-程序员宅基地

1. 实现父组件和子组件间 数据的双向绑定2. 描述:子组件和父组件间,各有一个&lt;input&gt;标签,在父组件input 内容,子组件的input 标签上同步 ,在子组件的input 上输入内容,父组件input 标签页同步3. 具体实现: 在父组件html中写如下代码子组件input标签&lt;home-input #homeinput&gt;&lt;/home-input&gt...

Mven安装配置、配置国内镜像,jdk17版本、配置maven环境变量_maven配置jdk17-程序员宅基地

配置创建新项目mevn的使用,打开idea File->New Projetcs Setup->Settings for new Projetcs…->Build,Execution,Deployment->Build Tools->Maven。在d盘建立名为maven的文件夹进apache-maven-38.4-bin-zip解压到“D:maven”中,repo是后期生成的现在不用管。_maven配置jdk17

NLP之文本分类实战_文本(nlp)分析实例分析-程序员宅基地

文本分类的目的:知道这个文档是做什么的!训练数据使用sklearn提供的新闻媒体的数据**步骤:**先使用向量空间模型将文本表示为向量,之后TF—IDF特征计算,然后使用朴素贝叶斯作为文本分类器,并在sklearn数据集上进行测试。最后使用常用评估方法来评估分类器的结果。# -*- coding: gb2312 -*-from sklearn.datasets import fetch..._文本(nlp)分析实例分析

Sketch添加组件库_gyuei的博客-程序员宅基地

找到sketch软件点击进入新建文件:点击文件----新建点击菜单栏中的首选项,如图选中组件库选项选中所需要的第三方组件库,点击左下角添加组件库按钮点击Agree按钮将文件存储在桌面点击添加组件库按钮选中所需文件即可看组件库中新增的组件...