Oracle数据库PL SQL开发、Oracle-SQL开发习题答案

第2章 编写简单的查询语句

练习1
1.使用两种方式查询所有员工(EMP)信息。
2.查询(EMP)员工编号、员工姓名、员工职位、员工月薪、工作部门编号。

练习2
1.员工转正后,月薪上调20%,请查询出所有员工转正后的月薪。
2.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的年薪所得(不考虑奖金部分,年薪的试用期6个月的月薪+转正后6个月的月薪)

练习3
1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作一年的所有收入(需考虑奖金部分),要求显示列标题为员工姓名,工资收入,奖金收入,总收入。

练习4
1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示格式为:XXX的第一年总收入为XXX。
2.查询员工表中一共有哪几种岗位类型。
课后作业
1.分别选择员工表、部门表、薪资等级表中的所有数据
2.分别查看员工表、部门表、薪资等级表结构。

第3章 限制数据和对数据排序

练习1
1.查询职位为SALESMAN的员工编号、职位、入职日期。
2.查询1985年12月31日之前入职的员工姓名及入职日期。
3.查询部门标号不在10部门的员工姓名、部门编号。

练习2
1.查询入职日期造82年至85年员工姓名,入职日期。
2.查询月薪在3000到5000的员工姓名,月薪。
3.查询部门编号为10或者20的员工姓名,部门编号。
4.查询经理编号为7709,7566,7788的员工姓名,经理编号。

练习3
1.查询员工姓名以W开头的员工姓名。
2.查询员工姓名倒数第2个字符为T的员工姓名。
3.查询奖金为空的员工姓名,奖金。

练习4
1.查询工资超过2000并且职位是WANAGER,或者职位是SALESMAN的员工姓名、职位、工资。
2 .查询工资超过2000并且职位是WANAGER或SALESMAN的员工姓名、职位、工资。
3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。

练习5
1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。
2.查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。
3.查询入职日期在82年至83年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序。

课后作业
1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。
2.查询员工姓名的第三个字母是a的员工姓名。
3.查询除了10、20号部门以外的员工姓名、部门编号。
4.查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序。
5.查询没有上级的员工(经理号为空)的员工姓名。
6.查询工资大于等于4500并且部门为10或者20的员工的姓名,工资,部门编号。

第4章 单行函数

练习1
1.写一个查询,用首字母大写,其他字母小写显示雇员的ename,显示名字的长度,并给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A或M的雇员,并对查询结果按雇员的ename升序排序。(提示:使用initcap、length、substr)

练习2
1.查询员工姓名中包含大写或小写字母A的员工姓名。
2.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度。(提示:要求使用INSTR函数)
3.查询每个职工的编号,姓名,工资
-要求将查询到的数据按照一定的格式合并成一个字符串
-前10位:编号,不足部分用填充,左对齐
-中间10位:姓名,不足部分用
填充,左对齐
-后10位:工资,不足部分用*填充,右对齐

练习3
1.写一个查询,分别计算100.456四舍五入到小数点后第2位,第1位,整数位的值。
2.写一个查询,分别计算100.456从小数点后第2位,第1位,整数位截断的值。

练习4
1.查询每个员工截止到现在一共入职多少天?
2.当前日期为2015年,指定日期格式DD-MON-RR,指定日期为01-1月-01,该日期实际所代表的日期为?

  1. 当前日期为2015年,指定日期格式DD-MON-RR,指定日期为01-1月-95,该日期实际所代表的日期为?
    4.当前日期为1998年,指定日期格式DD-MON-RR,指定日期为01-1月-01,该日期实际所代表的日期为?
    5.当前日期为1998年,指定日期格式DD-MON-RR,指定日期为01-1月-95,该日期实际所代表的日期为?
    6.当前日期为1998年,指定日期格式DD-MON-YY,指定日期为01-1月-01,该日期实际所代表的日期为?
    7.当前日期为1998年,指定日期格式DD-MON-YY,指定日期为01-1月-95,该日期实际所代表的日期为?

练习5
1.查询服务器当前时间。
2.查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份。(使用months_between, extract)
3.如果员工使用期6个月,查询职位不是MANAGER员工姓名,入职日期,转正日期,入职日期后的第一个星期一,入职当前月的最后一天日期。(使用add_months, next_day, last_day)

练习6
1.显示服务器系统当前时间,格式为2007-10-12 17:11:11。(用to_char函数)
2.显示ename,hiredate和雇员开始工作日是星期几,列标签DAY。(用to_char函数)
3.查询员工姓名,工资,格式化的工资(¥999,999.99)。(用to_char函数)
4.把字符串2015-3月-18 13:13:13转换成日期格式,并计算和系统当前时间间隔多少天。(用to_char函数)

课后作业
1.计算2000年1月1日到现在又多少月,多少周(四舍五入)。
2.查询员工ename的第三个字母是A的员工信息(使用两个函数)。
3.使用trim函数将字符串‘hello’,‘Hello’,‘bllb’,‘hello’分别处理得以下字符串ello、Hello、ll、hello。
4.将员工工资按如下格式显示:123,234.00 RMB。
5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
6.将员工的参加工作日期按照如此啊格式显示:月份/年份
7.在员工表中查询除员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。
8.创建一个查询显示所有雇员的ename和sal。格式化sal围殴15个字符长度,用$左填充,列标签SALARY。

第5章 多表连接

练习1
1.写一个查询,显示所有员工姓名,部门编号,部门姓名。
2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金。
3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。

练习2
1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。

练习3
1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
2.在上一题的基础上,添加没有经理的员工King,并按照员工编号排序。
3.查询所有员工编号,姓名,部门名称,包括没有部门的员工也要显示出来。

练习4
使用SQL-99写法,完成如下练习
1.创建一个员工表和部门表的交叉连接。
2.使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期。
3.使用USING子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点。
4.使用ON子句,显示工作在CHICAGO的员工姓名,本门名称,工作地点,薪资等级。
5.使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
6.使用右外连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

课后作业
1.显示员工SMITH的姓名,部门名称,直接上级名称。
2.显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
3.显示员工KING和FORD管理的员工姓名及其经理姓名。
4.显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。

第6章 分组函数

练习1
1.查询部门20的员工,每月的工资总和及平均工资。
2.查询工作在CHICAGO的员工人数,最高工资及最低工资。
3.查询员工表中一共有几种岗位类型。

练习2
1.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
2.查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。

练习3
1.查询部门人数大于2的部门编号,部门名称,部门人数。
2.查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,
部门平均工资,并按照部门人数升序排序。
课后作业
1.查询部门平均工资在2500元以上的部门名称及平均工资。
2.查询员工岗位中不是以“SA”开头并且平均工资在2500员以上的岗位及平均工资,并按平均工资降序排序。
3.查询部门人数在2人以上的部门名称,最低工资,最高工资,并对要求的工资进行四舍五入到整数位。
4.查询岗位不为SALESMSMAN,工资和大于等于2500的岗位及每种岗位的工资和。
5.显示经理编号和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序。
6.写一个查询,显示每个部门最高工资和最低工资的差额。

第7章 子查询

练习1
1.查询入职日期最早的员工姓名,入职日期。
2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称。
3.查询入职日期比20部门入职日期最早的员工还早的员工姓名,入职日期。
4.查询部门人数大于所有部门平均人数的部门编号,部门名称,部门人数。

练习2
1.查询入职日期比10部门任意一个员工晚的员工姓名,入职日期,不包括10部门员工。
2.查询入职日期比10部门所有员工晚的员工姓名,入职日期,不包括10部门员工。
3.查询职位和10部门人员一个员工职位相同的员工姓名,职位,不包括10部门员工。

练习3
1.查询职位及经理和10部门任意一个员工职位及经理相同的员工姓名,职位,不包括10部门员工。
2.查询职位及经理和10部门任意一个员工职位或经理相同的员工姓名,职位,不包括10部门员工。

练习4
1.查询比自己职位平均工资高的员姓名,职位,部门名称,职位平均工资。
2.查询职位和经理同员工SCOTT或BLAKE完全相同的员工姓名,职位,不包括SCOTT和BLAKE本人。
3.查询不是经理的员工姓名。

练习5
1.查询入职日期最早的前5名员姓名,入职日期。
2.查询工作在CHICAGO并且入职日期最早的前2名员工姓名,入职日期。

练习6
1.按照每页显示5条记录,分别查询第1页,第2页,第3页信息,要求显示员工姓名,入职日期,部门名称。

练习7
1.按照每页显示5条记录,分别查询工资最高的第1页,第2页,第3页信息,要求显示员工姓名,入职日期,部门名称,工资。

课后作业
1.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号,姓名及工资。
2.查询工资最高的员工姓名和工资。

  1. 查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
    4.查询员工工资为其部门最低工资的员工的编号和姓名及工资。
    5.显示经理是KING的员工姓名,工资。
    6.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。
    7.使用子查询的方式查询哪些职员在NEW YORK工作。
    8.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,查询结果中排除SMITH。
    9.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。
    10.写一个查询显示其上级领导是King的员工姓名、工资。
    11.显示所有工作在RESEARCH部门的员工姓名,职位。
    12.查询每个部门的部门编号、平均工资,要求部门的平均工资高于部门20的平均工资。
    13.查询大于自己部门平均工资的员工姓名,工资,所在部门平均工资,高于部门平均工资的额度。
    14.列出至少有一个雇员的所有部门。
    15.列出薪金比"SMITH"多的所有雇员。
    16.列出入职日期早于其直接上级的所有雇员。
    17.找员工姓名和直接上级的名字。
    18.显示部门名称和人数。
    19.显示每个部门的最高工资的员工。
    20.显示出和员工号7369部门相同的员工姓名,工资。
    21.显示出和姓名中包含"W"的员工相同部门的员工姓名。
    22.显示出工资大于平均工资的员工姓名,工资。
    23.显示出工资大于本部门平均工资的员工姓名,工资。
    24.显示每位经理管理员工的最低工资,及最低工资者的姓名。
    25.显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间
    26.显示出平均工资最高的的部门平均工资及部门名称

第8章 集合运算

练习1
1.分别使用联合运算及完全联合运算完成,按照时间升序顺序,查询员工7839的工作岗位列表。
2.使用多表连接,查询每个部门的部门编号,部门人数,没有人数的部门显示0。
3.使用联合运算,查询每个部门的部门编号,部门人数,没有人数的部门显示0。
4.使用联合运算,查询10号部门及20号部门的员工姓名,部门编号。

  1. 使用集合运算,输出如下效果?
    部门 工作地点 员工姓名 入职日期
    10 NEW YORK
    10 CLARK 1981/6/9
    10 KING 1981/11/17
    10 MILLER 1982/1/23
    20 DALLAS
    20 ADAMS 1987/5/23
    20 FORD 1981/12/3
    20 JONES 1981/4/2
    20 SCOTT 1987/4/19
    20 SMITH 1980/12/17
    30 CHICAGO
    30 ALLEN 1981/2/20
    30 BLAKE 1981/5/1
    30 JAMES 1981/12/3
    30 MARTIN 1981/9/28
    30 TURNER 1981/9/8
    30 WARD 1981/2/22
    40 BOSTON
    课后作业
    1.用集合运算,列出不包含job为SALESMAN的部门的部门号。
    2.写一个联合查询,列出下面的信息:
    EMP表中所有雇员的名字和部门编号,不管他们是否属于任何部门。
    DEPT表中的所有部门编号和部门名称,不管他们是否有员工。
    3.用集合运算查询出职位为SALESMAN和部门编号为10的
    人员编号、姓名、职位,不排除重复结果。
    4.用集合查询出部门为10和20的所有人员编号、姓名、所在部门名称。

第9章 高级子查询

练习1
如下练习,使用相关子查询完成
1.查询比所在职位平均工资高的员工姓名,职位
2.查询工资为其部门最低工资的员工编号,姓名 ,工资。

练习2
如下练习,用相关子查询完成
1.查询所有雇员编号,名字和部门名字。
2.查询哪些员工是经理?
3.查询哪些员工不是经理?
4.查询每个部门工资最低的两个员工编号,姓名,工资。

练习3
如下练习,用exists或not exists完成
1.列出至少有一个雇员的所有部门名称。
2.列出一个雇员都没有的所有部门名称。

课后作业 :
如下练习,使用相关子查询完成。
1.查询薪水多于他所在部门平均薪水的雇员名字 ,部门号。
2.查询员工姓名和直接上级的名字。
3.查询每个部门工资最高的员工姓名,工资。
4.查询每个部门工资前两名高的员工姓名,工资。

第10章 层次查询

课后作业
1.产生一个报告显示 BLAKE的所有下级(包括直接和间接下级)雇员的名字、薪水和部门号。
2.创建一个报告显示对于雇员 SMITH 经理的层次,包括级别和姓名,首先显示他的直接经理。
3.创建一个缩进报告显示经理层次,从名字为 KING的雇员开始,显示雇员的名字、经理ID和部门ID。
4.产生一个公司组织图表显示经理层次。从最顶级的人开始,排除所有job为CLERK的人,还要排除FORD和那些对FORD报告的雇员。

第11章 数据操作与事务控制

练习1
1.向部门表新增一个部门,部门编号为50,部门名称为HR,工作地点为SY。
2.向部门表新增一个部门,部门编号为60,部门名称为MARKET。

练习2
1.向员工表中新增一个员工,员工编号为8888,姓名为BOB,岗位为CLERK,经理为号7788,入职日期为1985-03-03,薪资3000,奖金和部门为空。

练习3
1.使用CREATE TABLE emp_back as
SELECT * FROM EMP WHERE 1=0,创建 emp_back表,拷贝下来即可。
CREATE TABLE emp_back
as
SELECT *
FROM EMP
WHERE 1=0;
2.把emp表中入职日期大于1982年1月1日之前的员 工信息复制到emp_back表中。
INSERT INTO emp_back
SELECT *
FROM emp
WHERE hiredate>='01-1月-82';

练习4
1.修改部门20的员工信息,把82年之后入职的员工入职日期向后调整10天
2.修改奖金为null的员工,奖金设置为0
3.修改工作地点在NEW YORK或CHICAGO的员工工资,工资增加500

练习5
1.重复做一下刚才的案例。

练习6
1.删除经理编号为7566的员工记录
2.删除工作在NEW YORK的员工记录
3.删除工资大于所在部门平均工资的员工记录

练习7
分析如下语句序列,哪些语句会结束事务?

练习8
1.test表为空表,分析如下语句操作后,最后test表的状态。

课后作业
1.使用如下语句,创建学生表student和班级表class
create table student ( --学生表
xh char(4),--学号
xm varchar2(10),--姓名
sex char(2),--性别
birthday date,--出生日期
sal number(7,2), --奖学金
studentcid number(2) --学生班级号
)
Create table class ( --班级表
classid number(2), --班级编号
cname varchar2(20),--班级名称
ccount number(3) --班级人数
)
2.基于上述学生表和班级表,完成如下问题
(1)添加三个班级信息为:1,JAVA1班,null
2,JAVA2班,null
3,JAVA3班,null
(2)添加学生信息如下:‘A001’,‘张三’,‘男’,‘01-5月05’,100,1
(3)添加学生信息如下:'A002','MIKE','男','1905-05-06',10
(4)插入部分学生信息: 'A003','JOHN','女’
(5)将A001学生性别修改为'女‘
(6)将A001学生信息修改如下:性别为男,生日设置为1980-04-01
(7)将生日为空的学生班级修改为Java3班
(8)请使用一条SQL语句,使用子查询,更新班级表中每个班级的人数
字段
3.使用如下语句,建立以下表
CREATE TABLE copy_emp (
empno number(4),
ename varchar2(20),
hiredate date default sysdate ,
deptno number(2),
sal number(8,2))
4.在第三题表的基础上,完成下列问题
(1)在表copy_emp中插入数据,要求sal字段插入空值,部门号50
,参加工作时间为2000年1月1日,其他字段随意
(2)在表copy_emp中插入数据,要求把emp表中部门号为10号部门
的员工信息插入
(3)修改copy_emp表中数据,要求10号部门所有员工涨20%的工资
(4)修改copy_emp表中sal为空的记录,工资修改为平均工资
(5)把工资为平均工资的员工,工资修改为空
(6)另外打开窗口2查看以上修改
(7)执行commit,窗口2中再次查看以上信息
(8)删除工资为空的员工信息
(9)执行rollback

第13章 创建和维护表

练习1
1.学校想做一个选课系统,其中涉及到课程表,学生表,请分别创建这两个表,自己思考表中应有的列及数据类型。

练习2
1.通过子查询的方式创建一个表dept10,该表保存10号部门的员工数据。

练习3
1.在员工表中添加一个性别列,列名为gender,类型为char(2),默认值为“男”
2.修改员工表中性别列的数据类型为char(4)
3.修改员工表中性别列的默认值为“女”
4.删除员工表中的性别列

课后作业
1.请分析按照以下要求都需要建立什么类型的字段?
–(1)最大2000个字节定长字符串
–(2)如果输入‘张三’ 后添空格6个
–(3)性别输入'男'或'女’
–(4)最大4000个字节变长字符串
–(5)如果在数据库中输入'张三'则显示数据'张三’
–(6)表示数字范围为- 10的125次方到10的126次方, 可
以表示小数 也可以表示整数
–(7)最大表示4位整数 -9999 到 9999
–(8)表示5位有效数字 2位小数的 一个小数 -999.99
到 999.99
–(9)包含年月日和时分秒
–(10)包含年月日和时分秒毫秒
–(11)二进制大对象图像/声音
2.创建表date_test,包含列d,类型为date型。试向
date_test表中插入两条记录,一条当前系统日期记录,一
条记录为“1998-08-18”。
• 3.创建与dept表相同表结构的表dtest,将dept表中部门编
号在40之前的信息插入该表。
• 3.创建与emp表结构相同的表empl,并将其部门编号为前30
号的员工信息复制到empl表。
• 4.试为学生表student增加一列学生性别gender 默认值
“女”。
• 5.试修改学生姓名列数据类型为定长字符型10位。

第14章 约束

练习1
1.学校有一个选课系统,其中包括如下关系模式:
系(系编号: 主键,
系名称: 唯一键,
系主任: 非空约束,
系所在校去:取值范围只能在南湖校区和浑南校区)
班级(班级编号: 主键,
班级名称: 唯一键,
所属系: 外键)
2.创建学生表,包含如下属性:
学号 定长字符型 10位 主键
姓名 变长字符型 20位 非空
性别 定长字符型 2位 取值范围只能为男或女
出生日期 日期型
所在班级

课后作业
1.简述5种约束的含义。
2.创建学生关系sc,包括属性名:
– 选课流水号 数值型 主键;
– 学生编号 非空 外键
– 课程编号 非空 外键;
– 成绩 0-100之间;
3.创建copy_emp,要求格式同emp表完全一样,不包含数据。
4.创建copy_dept,要求格式同dept表完全一样,不包含数据。
5.设置copy_emp 表中外键deptno,参照copy_dept中deptno,语句能否成功,为什么?
6.追加copy_dept表中主键deptno

第15章 视图

练习1
1.创建一个视图,通过该视图可以查询到工资在2000-5000内并且姓名中包含有A的员工编号,姓名,工资。
2.通过上述创建的视图查询数据

练习2
1.创建一个视图,通过该视图可以查询到工作在NEW YORK和CHICAGO的员工编号,姓名,部门编号,入职日期。
2.创建一个视图,通过该视图可以查询到每个部门的部门名称及最低工资。
3.通过如上视图,查询每个部门工资最低的员工姓名及部门名称

课后作业
• 1.创建视图v_emp_20,包含20号部门的员工编号,姓名,
年薪列(年薪=12*(工资+奖金);
• 2.从视图v_emp_20中查询年薪大于1万元员工的信息;
• 3.请为工资大于2000的员工创建视图,要求显示员工的部
门信息,职位信息,工作地点;
• 4.针对以上视图执行insert,update,delete,语句能否成
功,为什么

第16章 序列、索引、同义词

练习1
1.创建一个序列,该序列起始值从1开始,无最
大值,增量是1,不循环。
2.查询序列的当前值及下一个值
3.使用第1题所建的序列,向部门表中插入两条记录,部门编号使用序列值,部门名称分别为:Education、Market,城市分别为:DALLAS、WASHTON

练习2
1.使用子查询的方式,创建test表。
2.快速复制test表中的数据,复制到100w条左右
3.更新test表中的empno字段为rownum
4.查询test中empno为800000的记录值,记录查询执行时间。
5.在test表的empno字段上创建索引
6.重新执行第4题,对比查询时间

练习3
1.有如下关系模式,
student(sno,sname,gender,birthday,email);--学生
course(cno,cname,type,credit);--课程
sc(sno,cno,grade);--选课
试分析哪些列上适合创建索引?

课后作业
1.创建序列,起始位1,自增为1,最小值为1,最大值为9999
• 2.创建序列,起始值为50,每次增加5;
• 3.在表copy_dept中插入记录,其中部门号码采用上一步中创建的序列
生成;
• 4.请为工资创建索引,比较<10000,>1000,与round(sal)>10000,哪
个索引有效,哪个索引无效;
• 5.创建表,采用“create table copy_emp_index as select * from
emp”,生成500万条数据,把其中的“员工号”字段修改为唯一;
• 6.查询表copy_emp_index表中员工号为200001的员工姓名,工资,记
录执行时间;
• 7.在copy_emp_index表的empno字段上创建索引,再次执行第6题语句,
记录执行时间并做对比;
答案链接:https://blog.csdn.net/qq_37906822/article/details/81381918

你可能感兴趣的:(Oracle数据库PL SQL开发、Oracle-SQL开发习题答案)