2023年6月20日发(作者:)

1、用SQL语句创建上表(create table 方案名称.表名称 (字段1 数据类型

1,…… ))

2、写出一个匿名的SQL程序块,完成以下任务:向表中插入3000条记录,在SALARY字段中有500条记录的值为1000,500条记录的值为1200,1000条记录 的值为1500,1000条记录的值为1800 ID字段的值来自序列XL其他字段的值任意。

3、创建一个存储过程,应用上式所创建的函数,修改id在800到1200的记录的salary值。

4、用SQL语句创建一个视图,这个视图用来显示ID>1000的记录。

5、创建一个SYS用户中的函数fn1,函数的作用为:将指定ID号的记录中的SALARY字段的值乘以1.05。

6、建立一个存储过程,删除表中ID在特定范围内的记录(如:id>20,id<100)。并在SQL*PLUS

WORKSHEET中执行这个存储过程。

7、用SQL语句创建一个视图,这个视图用来显示id>1000的记录。

8、假设已经创建好序列,写出一个匿名的PL/SQL程序块,完成一次向数据表中插入3000条记录,其中除ID字段取值不同外,其他字段取相同值。

9、创建一个system方案中的函数fn1,函数的作用为:将指定ID号的记录中的salary字段值乘以1.05。

10、写出一个存储过程,这个存储过程的作用是修改特定ID编号的记录,将该记录的SALARY字段的值加上500。

11.现有学生表stuInfo,班级表classInfo,表结构如下:

stuInfo表:sid学号 int主键 自增

sname姓名 Varchar(30) 非空

sex性别 char(2) 只能插入0或1或空(“0”代表男,“1”代表女)

birthday生日 dateTime 默认为系统时间

age入学年龄 int可为空

smoney缴费 int可为空

cid班级编号 int非空 外键

classInfo表:

班级编号cid int主键 自增

班级名称cname varchar(30) 非空

(1)、建立一个存储过程用来接收一个学生编号,返回他的年龄、性别(显示男或女,空值为男)和他所在班级的人数并作为传出参数传出。

(2)、建立一个存储过程用来接收一个班级编号,找出其中的两位最老的学生的姓名,并打印。若没有找到该班级编号信息,则打印”班级信息错误”,若找到班级编号,但该班级没有学生,则打印“该班级没有学生”。

(3)用存储过程实现对stuInfo表的分页显示。

12.物资信息管理系统据库如下:

数据库名:物资信息管理Materials

管理员表 User_Manager

列名

User_ID

User_Name

User_Pass

User_Date

数据类型

int

varchar

varchar

datetime

长度

50

10

描述

用户ID(主键)

登陆用户名,唯一

登陆密码

账户创建时间(默认为当前系统时间),添加检查约束使创建账户的时间不能晚于当前的时间

描述

领用科室ID(主键)

领用科室名称

缺省1(1:正常,0:销户)

领用科室注册时间(默认当前系统时间),限制角色的创建时间不能晚于当前的时间

长度

主键

外键-User_Manager

外键-Department_Manager

缺省为1,(1:打印纸2:签字笔)

领用数量,缺省0

领用时间(默认当前系统时间),限制时间不能晚于当前的时间

描述

领用科室表Department_Manager

列名

Department_ID

Department_Name

Department_State

Department_Date

int

Varchar

int

datetime

数据类型

20

长度

领用记录表Consuming_Manager

列名

Co_ID

User_ID

Department_ID

Type_Id

Co_Quentity

Co_Date

int

int

int

Int

float

datetime

数据类型

物品库存表Store_Manager

列名

St_ID

Type_Id

St_Quentity

int

Int

Float

数据类型

长度

自增ID

缺省为1,(1:打印纸2:签字笔)

物品库存数量

描述 (1).查询领用记录中,编号为1的记录对应的系统管理员的姓名,领用科室姓名,领用科室注册时间,领用日期,领用产品种类(为Type_Id为1,则将此处的显示为“打印纸”,否则显示为“签字笔”), 领用产品数量

提示:使用 case –when

(2).创建存储过程验证登陆系统管理员的用户与密码是否正确,若用户名不存在返回-1,若用户名存在但是密码错误返回0,若验证成功则返回用户的User_ID。

(3)创建存储过程-完成添加一条领用记录。记录添加过程中必须完成对领用库存表的添加或更新操作,若数据插入中间出现问题,请使用事务回滚

写出测试数据

(4)创建触发器,删除领用科室表中的一条数据,必须先删除领用记录表中所有对应于该领用科室的所有数据,然后才能删除领用科室。

写出测试语句

13.表className中有如下分类:

classID className

1

2

衣服

裤子

5 帽子

10 鞋子

表productInfo有如下记录:

productID productName parentID clickNum

1 男士衣服 1 90

--衣服类别中这条记录的点击率最高

2 女士衣服 1 80

3 男士裤子 2 70

4 女士裤子 2 90

--裤子类别中这条记录点击率最高

5 男士帽子 5 15

6 女士帽子 5 30

--帽子类别中这条点击率最高

7 男士鞋子 10 65

--鞋子类别中这条点击率最高

8 女士鞋子 10 52

9 女士鞋子1 10 54

使用存储过程实现:要求分别把衣服,裤子,帽子,鞋子这些类别中点击率最高的一条记录找出来,然后再降序排列,结果应如下:

productID productName clickNum

1 男士衣服 90

4 女士裤子 90

7 男士鞋子 65

6 女士帽子 30

14.程序员工资表:ProWage

字段名称

ID

PName

Wage

数据类型

int

Char(10)

int

说明

自动编号,主键

程序员姓名

工资

创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?

例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写PL/SQL来实现如下功能:

1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。

2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元,至到所有程序员平均工资达到4500元。

15.某cc表数据如下:

c1 c2

--------------

1 西 1 安

1 的

2 天

2 气

3 好

……

转换为

1 西安的

2 天气

3 好

要求:不能改变表结构及数据内容,仅在最后通过SELECT显示出这个查询结果

16. 用存储过程实现:对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15%;如果该员工职位是CLERK,并且在NEW YORK工作那么就给他薪金扣除5%;其他情况不作处理

17.编写一个PL/SQL程序块,对直接上级是'BLAKE'的所有员工,按照参加工作的时间加薪:

81年6月以前的加薪10%

81年6月以后的加薪5%

19.用存储过程实现:根据员工在各自部门中的工资高低排出在部门中的名次(允许并列).

20.编写一个触发器实现如下功能:

对修改职工薪金的操作进行合法性检查:

a) 修改后的薪金要大于修改前的薪金

b) 工资增量不能超过原工资的10%

c) 目前没有单位的职工不能涨工资

21.编写一个PL/SQL程序块,对名字以"A"或"S"开始的所有雇员按他们的基本薪水的10%加薪。

22.编写一PL/SQL,对所有的"销售员"(SALESMAN)增加佣金500.

23.编写一PL/SQL,以提升两个资格最老的"职员"为"高级职员"。(工作时间越长,优先级越高)

24.编写一PL/SQL,对所有雇员按他们基本薪水的10%加薪,如果所增加的薪水大于5000,则取消加薪。

25.编写一个给特殊雇员加薪10%的过程,这之后,检查如果已经雇佣该雇员超过60个月,则给他额外加薪3000.

26.编写一个函数以检查所指定雇员的薪水是否有效范围内。不同职位的薪水范围为:

Designation Raise

Clerk 1500-2500

Salesman 2501-3500

Analyst 3501-4500

Others 4501 and above.

如果薪水在此范围内,则显示消息"Salary is OK",否则,更新薪水为该范围内的最低值。

27.有一张表(table),里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):

大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。

显示格式:

语文 数学 英语

及格 优秀 不及格

28.随机取出10条数据

29.不借助第三方工具,怎样查看sql的执行计划

30.如何定位重要(消耗资源多)的SQL(使用CPU多的用户session)

31、 如何跟踪某个session的SQL(利用TRACE 跟踪)

32、存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql

33、表nba记录了nba(team VARCHAR2(10),y NUMBER(4))夺冠球队的名称及年份:

TEAM Y

-------------------- ------------------------------

活塞 1990

公牛 1991

公牛 1992

公牛 1993 火箭 1994

火箭 1995

公牛 1996

公牛 1997

公牛 1998

马刺 1999

湖人 2000

湖人 2001

湖人 2002

马刺 2003

活塞 2004

马刺 2005

热火 2006

马刺 2007

凯尔特人 2008

湖人 2009

湖人 2010

请写出一条SQL语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下:

TEAM B E

-------------------- ---------- --------------------------------

公牛 1991 1993

火箭 1994 1995

公牛 1996 1998

湖人 2000 2002

湖人 2009 2010

34、查找出当前用户模式下,每张表的记录数,以scott用户为例,结果应如下:

<4

<14

<0

<5 35、某cc表数据如下:

c1 c2

--------------

1 西

1 安

1 的

2 天

2 气

3 好

……

转换为

1 西安的

2 天气

3 好

要求:不能改变表结构及数据内容,仅在最后通过SELECT显示出这个查询结果

36、请用一条sql语句查询出表中每个部门工资前三位的数据,显示结果如下:

DEPTNO SAL1 SAL2 SAL3

------ ---------- ---------- -------------------------------------

10 5000 2450 1300

20 3000 2975 1100

30 2850 1600 1500

37、 求1-100之间的素数(PL&SQL编程)

2023年6月20日发(作者:)

1、用SQL语句创建上表(create table 方案名称.表名称 (字段1 数据类型

1,…… ))

2、写出一个匿名的SQL程序块,完成以下任务:向表中插入3000条记录,在SALARY字段中有500条记录的值为1000,500条记录的值为1200,1000条记录 的值为1500,1000条记录的值为1800 ID字段的值来自序列XL其他字段的值任意。

3、创建一个存储过程,应用上式所创建的函数,修改id在800到1200的记录的salary值。

4、用SQL语句创建一个视图,这个视图用来显示ID>1000的记录。

5、创建一个SYS用户中的函数fn1,函数的作用为:将指定ID号的记录中的SALARY字段的值乘以1.05。

6、建立一个存储过程,删除表中ID在特定范围内的记录(如:id>20,id<100)。并在SQL*PLUS

WORKSHEET中执行这个存储过程。

7、用SQL语句创建一个视图,这个视图用来显示id>1000的记录。

8、假设已经创建好序列,写出一个匿名的PL/SQL程序块,完成一次向数据表中插入3000条记录,其中除ID字段取值不同外,其他字段取相同值。

9、创建一个system方案中的函数fn1,函数的作用为:将指定ID号的记录中的salary字段值乘以1.05。

10、写出一个存储过程,这个存储过程的作用是修改特定ID编号的记录,将该记录的SALARY字段的值加上500。

11.现有学生表stuInfo,班级表classInfo,表结构如下:

stuInfo表:sid学号 int主键 自增

sname姓名 Varchar(30) 非空

sex性别 char(2) 只能插入0或1或空(“0”代表男,“1”代表女)

birthday生日 dateTime 默认为系统时间

age入学年龄 int可为空

smoney缴费 int可为空

cid班级编号 int非空 外键

classInfo表:

班级编号cid int主键 自增

班级名称cname varchar(30) 非空

(1)、建立一个存储过程用来接收一个学生编号,返回他的年龄、性别(显示男或女,空值为男)和他所在班级的人数并作为传出参数传出。

(2)、建立一个存储过程用来接收一个班级编号,找出其中的两位最老的学生的姓名,并打印。若没有找到该班级编号信息,则打印”班级信息错误”,若找到班级编号,但该班级没有学生,则打印“该班级没有学生”。

(3)用存储过程实现对stuInfo表的分页显示。

12.物资信息管理系统据库如下:

数据库名:物资信息管理Materials

管理员表 User_Manager

列名

User_ID

User_Name

User_Pass

User_Date

数据类型

int

varchar

varchar

datetime

长度

50

10

描述

用户ID(主键)

登陆用户名,唯一

登陆密码

账户创建时间(默认为当前系统时间),添加检查约束使创建账户的时间不能晚于当前的时间

描述

领用科室ID(主键)

领用科室名称

缺省1(1:正常,0:销户)

领用科室注册时间(默认当前系统时间),限制角色的创建时间不能晚于当前的时间

长度

主键

外键-User_Manager

外键-Department_Manager

缺省为1,(1:打印纸2:签字笔)

领用数量,缺省0

领用时间(默认当前系统时间),限制时间不能晚于当前的时间

描述

领用科室表Department_Manager

列名

Department_ID

Department_Name

Department_State

Department_Date

int

Varchar

int

datetime

数据类型

20

长度

领用记录表Consuming_Manager

列名

Co_ID

User_ID

Department_ID

Type_Id

Co_Quentity

Co_Date

int

int

int

Int

float

datetime

数据类型

物品库存表Store_Manager

列名

St_ID

Type_Id

St_Quentity

int

Int

Float

数据类型

长度

自增ID

缺省为1,(1:打印纸2:签字笔)

物品库存数量

描述 (1).查询领用记录中,编号为1的记录对应的系统管理员的姓名,领用科室姓名,领用科室注册时间,领用日期,领用产品种类(为Type_Id为1,则将此处的显示为“打印纸”,否则显示为“签字笔”), 领用产品数量

提示:使用 case –when

(2).创建存储过程验证登陆系统管理员的用户与密码是否正确,若用户名不存在返回-1,若用户名存在但是密码错误返回0,若验证成功则返回用户的User_ID。

(3)创建存储过程-完成添加一条领用记录。记录添加过程中必须完成对领用库存表的添加或更新操作,若数据插入中间出现问题,请使用事务回滚

写出测试数据

(4)创建触发器,删除领用科室表中的一条数据,必须先删除领用记录表中所有对应于该领用科室的所有数据,然后才能删除领用科室。

写出测试语句

13.表className中有如下分类:

classID className

1

2

衣服

裤子

5 帽子

10 鞋子

表productInfo有如下记录:

productID productName parentID clickNum

1 男士衣服 1 90

--衣服类别中这条记录的点击率最高

2 女士衣服 1 80

3 男士裤子 2 70

4 女士裤子 2 90

--裤子类别中这条记录点击率最高

5 男士帽子 5 15

6 女士帽子 5 30

--帽子类别中这条点击率最高

7 男士鞋子 10 65

--鞋子类别中这条点击率最高

8 女士鞋子 10 52

9 女士鞋子1 10 54

使用存储过程实现:要求分别把衣服,裤子,帽子,鞋子这些类别中点击率最高的一条记录找出来,然后再降序排列,结果应如下:

productID productName clickNum

1 男士衣服 90

4 女士裤子 90

7 男士鞋子 65

6 女士帽子 30

14.程序员工资表:ProWage

字段名称

ID

PName

Wage

数据类型

int

Char(10)

int

说明

自动编号,主键

程序员姓名

工资

创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?

例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写PL/SQL来实现如下功能:

1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。

2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元,至到所有程序员平均工资达到4500元。

15.某cc表数据如下:

c1 c2

--------------

1 西 1 安

1 的

2 天

2 气

3 好

……

转换为

1 西安的

2 天气

3 好

要求:不能改变表结构及数据内容,仅在最后通过SELECT显示出这个查询结果

16. 用存储过程实现:对所有员工,如果该员工职位是MANAGER,并且在DALLAS工作那么就给他薪金加15%;如果该员工职位是CLERK,并且在NEW YORK工作那么就给他薪金扣除5%;其他情况不作处理

17.编写一个PL/SQL程序块,对直接上级是'BLAKE'的所有员工,按照参加工作的时间加薪:

81年6月以前的加薪10%

81年6月以后的加薪5%

19.用存储过程实现:根据员工在各自部门中的工资高低排出在部门中的名次(允许并列).

20.编写一个触发器实现如下功能:

对修改职工薪金的操作进行合法性检查:

a) 修改后的薪金要大于修改前的薪金

b) 工资增量不能超过原工资的10%

c) 目前没有单位的职工不能涨工资

21.编写一个PL/SQL程序块,对名字以"A"或"S"开始的所有雇员按他们的基本薪水的10%加薪。

22.编写一PL/SQL,对所有的"销售员"(SALESMAN)增加佣金500.

23.编写一PL/SQL,以提升两个资格最老的"职员"为"高级职员"。(工作时间越长,优先级越高)

24.编写一PL/SQL,对所有雇员按他们基本薪水的10%加薪,如果所增加的薪水大于5000,则取消加薪。

25.编写一个给特殊雇员加薪10%的过程,这之后,检查如果已经雇佣该雇员超过60个月,则给他额外加薪3000.

26.编写一个函数以检查所指定雇员的薪水是否有效范围内。不同职位的薪水范围为:

Designation Raise

Clerk 1500-2500

Salesman 2501-3500

Analyst 3501-4500

Others 4501 and above.

如果薪水在此范围内,则显示消息"Salary is OK",否则,更新薪水为该范围内的最低值。

27.有一张表(table),里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):

大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。

显示格式:

语文 数学 英语

及格 优秀 不及格

28.随机取出10条数据

29.不借助第三方工具,怎样查看sql的执行计划

30.如何定位重要(消耗资源多)的SQL(使用CPU多的用户session)

31、 如何跟踪某个session的SQL(利用TRACE 跟踪)

32、存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql

33、表nba记录了nba(team VARCHAR2(10),y NUMBER(4))夺冠球队的名称及年份:

TEAM Y

-------------------- ------------------------------

活塞 1990

公牛 1991

公牛 1992

公牛 1993 火箭 1994

火箭 1995

公牛 1996

公牛 1997

公牛 1998

马刺 1999

湖人 2000

湖人 2001

湖人 2002

马刺 2003

活塞 2004

马刺 2005

热火 2006

马刺 2007

凯尔特人 2008

湖人 2009

湖人 2010

请写出一条SQL语句,查询出在此期间连续获得冠军的有哪些,其连续的年份的起止时间是多少,结果如下:

TEAM B E

-------------------- ---------- --------------------------------

公牛 1991 1993

火箭 1994 1995

公牛 1996 1998

湖人 2000 2002

湖人 2009 2010

34、查找出当前用户模式下,每张表的记录数,以scott用户为例,结果应如下:

<4

<14

<0

<5 35、某cc表数据如下:

c1 c2

--------------

1 西

1 安

1 的

2 天

2 气

3 好

……

转换为

1 西安的

2 天气

3 好

要求:不能改变表结构及数据内容,仅在最后通过SELECT显示出这个查询结果

36、请用一条sql语句查询出表中每个部门工资前三位的数据,显示结果如下:

DEPTNO SAL1 SAL2 SAL3

------ ---------- ---------- -------------------------------------

10 5000 2450 1300

20 3000 2975 1100

30 2850 1600 1500

37、 求1-100之间的素数(PL&SQL编程)