C/C++教程

数据库之Oracle笔试面试题收集(来自网络)

本文主要是介绍数据库之Oracle笔试面试题收集(来自网络),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据库之Oracle笔试面试题收集(来自网络)



问题:

1、解释冷备份和热备份的不同点及各自的优点?

2、解释归档和非归档模式之间的不同和它们各自的优缺点?

****************************************************************************************************************************************************************************************

解答:

1、解释冷备份和热备份的不同点及各自优点?

答:

          1、不同点:

            热备份:针对归档模式的数据库,在数据库处于工作状态时进行备份;

            冷备份:适用于所有模式的数据库,在数据库关闭后进行备份。

          2、各自优点:

            热备份:当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点;

            冷备份:它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,不必将归档日志写入硬盘,数据库性能会比归档模式稍好。

记忆方式:热备份>归档模式>工作时进行>恢复任意时间点

                      冷备份>所有模式>关闭时进行>少许提高性能

2、解释归档和非归档模式之间的不同和它们各自的优缺点?

答:归档模式是指可以备份所有的数据库transactions并恢复到任意一个时间点。

        非归档模式则相反,不能恢复到任意一个时间点。

        但是非归档模式可以带来数据库性能上的少许提高。

记忆方式:归档模式>热备份>恢复任意时间点>性能少许下降

                      非归档模式>冷备份>恢复完全备份>性能少许提高

不积跬步无以至千里

问题:

1、如何根据初始化文件pfile转换成spfile文件?

2、数据库正常启动所经历的状态有哪几种?

解答:

1、如何根据初始化文件pfile转换成spfile文件?

答:

使用命令:SQL>create spfile from pfile。

解析:

(1)、概述:

Oracle从9i开始,参数初始化文件新增为两种,即文本参数文件和服务器参数文件。它们在数据库实例启动时候加载,决定了数据库的物理结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重要文件。

(2)简述pfile和spfile

它们都是必须的参数文件。

pfile:初始化参数文件,为ASCII文本文件,可以直接编辑,对这类文件的修改是需要手工进行的,并且修改后,重启Oracle实例才会生效。

spfile:服务器参数文件,二进制文件,不可以直接编辑。

(3)、查看系统是以pfile还是spfile启动

命令:SQL>select isspecified,count(*) from v$spparameter group by isspecified;

如果isspecified里有true,表明用spfile进行了指定配置,如果全为false,则表明用pfile启动。

(4)、使用spfile的好处

 spfile改正了pfile管理混乱的问题,在多结点的环境里,pfile会有多个image启动时需要跟踪最新的image,这是个烦琐的过程。用spfile以后,所有参数改变都写到spfile里面参数配置有个权威的来源。

(5)、查看spfile location

命令SQL> show parameter spfile

(6)、互相创建

spfile和pfile是可以相互创建的,命令如下:

SQL>create spfile from pfile;

SQL>create pfile from spfile.

当数据库第一次被创建的时候,系统会收集到创建者设置的各个参数,生成pfile。之后,在第一次启动数据库时,会依靠这个pfile创建spfile,此时将不再需要pfile文件。而当下次启动时会使用pfile文件。如果数据库不出现故障,pfile文件将一直使用。然而若spfile被损坏或需重新创建spfile文件,这时候就可以使用pfile文件来建立新的spfile文件。

2、数据库正常启动所经历的状态有哪几种?

答:

数据库实例启动:NOMOUNT状态;

数据库装载:MOUNTED状态;

数据库打开:OPEN状态。

解析:

(1)、举例简述:

对于数据库的启动介绍前先举一个简单例子,如果我们打算开一家公司,一般会先有初始化的规划,把初始化的规划思路整理成书面材料文件,然后招聘有经验的相关部门的管理人员组成一个团队,其次是招聘每个部门里的基层员工,这样一个简单的公司体系就形成了。

启动oracle数据库如同上面的例子一样,数据库启动时,先要找到初始化文件(spfile/pfile),这时数据库处在nomount状态,这相当于创办公司的初始阶段;其次根据初始文件找到控制文件,这时数据库处于mount状态,这相当于创业时最初组建的管理团队。在之后会根据控制文件找到数据文件、重做日志文件,从而处在open状态,这时用户可以访问数据库了。如同一个公司的体系初步建设起来了。

(2)、实验验证:

输入第1行命令:sqlplus/nolog;

说明:

启动SQLPLUS但不进行登录,只是进入sqlplus软件,相当于打开一个登录窗口,用户名、密码是接下来才输入的,这样输入能够让下面的输入不显示密码起到安全的作用。

输入第2行命令:conn / as sysdba;

说明:

        oracle在登录时,有三种身份认证方式:操作系统身份认证、密码文件认证、数据库认证。而conn /as sysdba是属于操作系统认证。你当前电脑开机时登录的用户,也就是进入操作系统的用户,例如Win xp系统下是Administrator,它在你电脑的ORA_DBA组中。可以在“我的电脑”单击右键,找到“管理”,选择“本地用户和组”,发现有一个组叫“ORA_DBA”,双击它,看到成员列表中有“Administrator”。也就是在conn /as sysdba,oracle会进行操作系统验证,发现你当前登录的用户就属于Administrator组,因此才可以登录成功。你可以把ORA_DBA组中的“Administrator”用户删除,再conn /as sysdba,就发现进不去了。

输入第3行命令:SQL> shutdown; ------------shutdown

输入第4行命令:SQL> select status from v$instance;

说明:

查询当前实例的状态,v$instance是个视图。这个状态指明的是数据库在用startup启动以后的所处的状态。

输入第5行命令:SQL> startup nomount; ------------started

输入第6行命令:SQL> select status from v$instance;

输入第7行命令:SQL> alter database mount; ------------mounted

输入第8行命令:SQL> select status from v$instance;

输入第9行命令:SQL> alter database open; ------------open

输入第10行命令:SQL> select status from v$instance;

输入第11行命令:SQL> shutdown;

问题:

1、说出两种相关约束?

2、解释$ORACLE_HOME和$ORACLE_BASE的区别?

解答:

1、答:主键和外键。

2、答:$ORACLE_HOME:oracle的产品目录;

              $ORACLE_BASE:oracle的根目录。

问题:

1、创建用户时,需要授予新用户什么权限方能使其连上数据库?

2、备份如何分类?

解答:

1、答:CONNECT权限。

2、答:

第一种:逻辑备份和物理备份。

             逻辑备份可以使用EXP/IMP;

             物理备份可以使用RMAN。

第二种:热备份和冷备份。

             热备份为数据库正常访问的情况下备份数据库,RMAN备份也为热备份。

             冷备份为脱机备份,关闭数据库然后备份数据库的所有文件。

问题:

1、用于网络连接的两个文件是什么?

2、数据库的重做日志(Redo Logs)的作用?

解答:

1、答:TNSNAMES.ORA和SQLNET.ORA;

2、答:Redo Logs是用于存放数据库数据改动状况的物理和逻辑结构,可以用以修复数据库。

1、临时表空间和永久表空间的区别是什么?

2、解释Function、Procedure、Package的区别?

问题:

1、答:

临时表空间(Temporary Tablespace):用于临时对象;

永久表空间(Permanent Tablespace):用于存储存在的对象,如表、回滚段等。

2、答:

Function、Procedure是PL/SQL代码的集合,一般为了完成一个任务;

Procedure不需要返回任何值而Function将返回一个值。

Package是为了完成一个商业功能的一组Function和Procedure的集合。



问题:

1、简述数据库的data block、extent、segement的区别?

2、简述为何要使用索引?

问题:

1、答:

data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent。一个数据库对象拥有的所有extents被称为该对象的segment。

2、答:

可以快速访问表中的data block,即能够加快访问数据的速度。



问题:

1、简述tablespace和datafile的关系?

2、什么视图用来判断表空间的剩余空间?

问题:

1、答:

一个tablespace可以有一个或多个datafile;

每个datafile只能在一个tablespace内;

table中的数据通过hash算法分布在tablespace中的各个datafile中;

tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

2、答:

DBA_FREE_SPACE。



问题:

1、比较truncate和delete命令的区别?

2、如果必须利用备份恢复数据库,但此时没有控制文件,如何应对?

问题:

1、答:

两者都可以用来删除表中所有的记录。

truncate是DDL操作,它移动HWK,不需要rollback segment。

delete是DML操作,需要rollback segment且花费较长的时间。

2、答:

重建控制文件,用带backup control file子句的recover命令恢复数据库。



1、oracle数据库的约束条件有哪些?

2、表的主键和唯一约束很像,有哪些区别?

问题:

1、  答:

有5个约束条件:主键、外键、非空、唯一、条件。

解释:

非空:这个列的值不能为空(NOT NULL);

唯一:这个列的值在表中是唯一存在的,不能重复,但可以为空值(NULL);

条件:可以对列的值设定在某个条件范围之内,比如,人的年龄就不能为负数,可以设置这个列的条件为大于0而小于200;

主键:primary,主键是关系数据库表中的某一行或者某几列的集合。它能够唯一标识数据库表中的一行。主键不能包含空值(NULL);

外键:foreign,外键是关系数据库表中的一列或者某几列的组合。它的值或与另外一个表的某一列或者某几列相匹配,这一列是另一个表的主键。

2、  答:

表的主键是列的值为表中的唯一标识,不能为空值(NULL),而表的唯一约束是列的值在表中唯一存在,可以为空值(NULL)。  

1、日志的作用是什么?

2、RMAN是什么?

问题:

1、

答:

记录数据库事务,最大限度地保证数据的一致性与安全性。

重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件。

归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。

2、

答:

        RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复数据库,RMAN可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。



问题:

1、RMAN的用户接口有几种?

2、描述RMAN的特点?

问题:

1、答:

RMAN有三种不同的用户接口:COMMAND LINE方式、GUI方式、API方式。

解释:

GUI方式集成在OEM中的备份管理器;

API方式用于集成到第三方的备份软件中。

2、答:

RMAN的特点如下:

1功能类似于物理备份,但比物理备份强大N倍。
2可以压缩空快。
3可以在块水平上实现增量。
4可以把备份的输出打包成备份集,也可以按固定大小分割备份集。
5备份与恢复的过程可以自动管理。
6可以使用脚本(存在于Recovery Catalog中)。
7可以做坏块监测。


 

 







1、下列不属于ORACLE的逻辑结构的是()

A、区

B、段

C、数据文件

D、表空间

答案:C

2、下面哪个用户不是ORACLE缺省安装后就存在的用户( )

A、SYSDBA

B、SYSTEM

C、SCOTT

D、SYS

答案:A

3、下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表( )

A、授予了CONNECT的角色,但没有授予RESOURCE的角色

B、没有授予用户系统管理员的角色

C、数据库实例没有启动

D、数据库监听没有启动

答案:A

4、( )函数通常用来计算累计排名,移动平均数和报表聚合。

A、汇总

B、分析

C、分组

D、单行

答案:B

5、带有( )字句的SELECT语句可以在表的一行或多行放置排他锁。 

A、FOR INSERT

B、FOR UPDATE

C、FOR DELETE

D、FOR REFRESH

答案:B

6、在Oracle中,你以SYSDBA登录,CUSTOMER表位于Mary用户方案中,下面哪条语句为数据库中的所有用户创建CUSTOMER表的同义词( )。

A、CREATE PUBLIC SYNONYM cust ON mary.customer;

B、CREATE PUBLIC SYNONYM cust FOR mary.customer;

C、CREATE SYNONYM cust ON mary.customer FOR PUBLIC;

D、不能创建CUSTOMER的公用同义词。

答案:B

7、 在Oracle中,当FETCH语句从游标获得数据时,下面叙述正确的是( )。

A、游标打开

B、游标关闭

C、当前记录的数据加载到变量中

D、创建变量保存当前记录的数据

答案:C

8、 在Oracle中,表VENDOR包含以下列:

VENDOR_ID NUMBER Primary Key

NAME VARCHAR2(30)

LOCATION_ID NUMBER

ORDER_DT DATE

ORDER_AMOUNT NUMBER(8,2)

下面对表VENDOR运用分组函数的子句合法的是( )。

A、FROM MAX(order_dt)

B、SELECT SUM(order_dt)

C、SELECT SUM(order_amount)

D、WHERE MAX(order_dt) = order_d

答案:C

9、 在Oracle中,表EMP包含以下列:

……

NAME VARCHAR2(20)

ADDR VARCHAR2(60)

……

要以NAME’s address is ADDR格式返回数据,以下SQL语句正确的是( )。 + 的两边做To_number()

A、SELECT NAME + ’’’s address is ‘ + ADDR FROM EMP;

B、SELECT NAME || ’’’s address is ‘ || ADDR FROM EMP;

C、SELECT NAME + ’\’s address is ‘ + ADDR FROM EMP;

D、SELECT NAME || ’\’s address is ‘ || ADDR FROM EMP;

答案:B

10、 在Oracle中,以下不属于集合操作符的是( )。

A、UNION

B、SUM

C、MINUS

D、INTERSECT

答案:B

11、 在Oracle中,表分区方式( )建议分区数是2的幂(2、4、8等),以获得最平均的数据发布。

A、范围分区

B、列表分区

C、散列分区

D、复合分区

答案:C

12、 在Oracle中,关于锁,下列描述不正确的是( )。

A、锁用于在用户之间控制对数据的并发访问

B、可以将锁归类为行级锁和表级锁

C、insert、update、delete语句自动获得行级锁

D、同一时间只能有一个用户锁定一个特定的表

答案:D

13、在Oracle中,序列venseq使用下面的语句创建:

CREATE SEQUENCE venseq INCREMENT BY 1 START WITH 10

MAXVALUE 100 MINVALUE 10 CYCLE CACHE 5;

下面对序列venseq修改的语句,错误的是( )。

A、ALTER SEQUENCE venseq START WITH 1;

B、ALTER SEQUENCE venseq MAXVALUE 90;

C、ALTER SEQUENCE venseq NOMINVALUE;

D、ALTER SEQUENCE venseq NOCACHE;

答案:A

14、在Oracle中,使用以下语句创建视图:

CREATE OR REPLACE VIEW pen_view

AS SELECT * FROM order_master

WHERE ostatus = ‘p’ WITH CHECK OPTION CONSTRAINT penv;

当用户试图执行以下语句: UPDATE pen_view SET ostatus = ‘d’ WHERE ostatus=’p’; 下列描述正确的是( )。

A、Oracle将ostatus修改为d,不提示任何错误

B、Oracle不执行更新操作,并返回错误信息

C、Oracle将ostatus修改为d,同时返回错误信息

D、Oracle不执行更新操作,也不提示任何错误

答案:B

15、在Oracle中,在以下情形建立位图索引可以获得较好的性能( )。

A、在列值唯一的列上建立

B、在列值相差很小的列上建立

C、在列值频繁重复的列上建立

D、在用于保存位图的列上建立

答案:C

16、在Oracle中,通过命令( )可以释放锁。

A、INSERT

B、DELETE

C、ROLLBACK

D、UNLOCK

答案:C

17、在Oracle中,下面关于簇的描述不正确的是( )。

A、簇是一组表,这些表拥有公共列,并且经常一起使用

B、与每个表及其索引单独存储相比,簇能够提高INSERT语句的性能

C、由于簇表中的所有行都使用相同的列作为公共主键,因此这些列仅为所有表存储一次,从而节省了存储空间

D、经常更新的列不应选作簇键

答案:B

18、在Oracle中,( )操作符允许引用现有的行对象。

A、CAST

B、REF

C、MULTISET

D、MAP

答案:B

19、在Oracle中,关于PL/SQL下列描述正确的是( )。

A、PL/SQL代表Power Language/SQL

B、PL/SQL不支持面向对象编程

C、PL/SQL块包括声明部分、可执行部分和异常处理部分

D、PL/SQL提供的四种内置数据类型是character,integer,float,boolean

答案:C

20、在Oracle中,阅读下列PL/SQL块:

DECLARE

v_lower NUMBER:=2;

v_upper NUMBER:=100;

v_count NUMBER:=1;

BEGIN

I = 2; I <= 2; i++

FOR i IN v_lower..v_lowerLOOP

INSERT INTO test(results)

VALUES (v_count);

v_count := v_count +1;

ENDLOOP;

END;

请问FOR LOOP循环体执行了( )次。

A、1

B、2

C、98

D、100

E、235:

答案:A

21、在Oracle中,关于子程序的描述不正确的是( )。

A、子程序是已命名的PL/SQL块,可带参数并可在需要时随时调用

B、子程序可以具有声明部分、可执行部分和异常处理部分

C、子程序参数的模式只有IN和OUT两种模式

D、子程序可分为过程和函数两种类型

答案:C

22、在Oracle中,关于触发器的描述正确的是( )。

A、触发器可以删除,但不能禁用

B、触发器只能用于表

C、触发器可以分为行级和语句级两种

D、触发器是一个对关联表发出insert、update、delete或select … for update语句时触发的存储过程

答案:D

23、在Oracle中,你需要创建索引提高薪水审查的性能,该审查要对员工薪水提高12个百分点后进行分析处理,下面哪个create index命令能解决此问题( )。

A、CREATE INDEX my_idx_1 ON employee(salary*1.12);

B、CREATE UNIQUE INDEX my_idx_1 ON employee(salary);

C、CREATE BITMAP INDEX my_idx_1 ON employee(salary);

D、CREATE INDEX my_idx_1 ON employee(salary) REVERSE;

答案:A

24、在Oracle中,执行下面的语句:

SELECT ceil(-97.342),

floor(-97.342),  -123.01 -124

round(-97.342),

trunc(-97.342)

FROM dual;

哪个函数的返回值不等于-97( )。

A、ceil()

B、floor()

C、round(0)

D、trunc()

答案:B

25、在Oracle中,用以下SQL命令创建了一个序列:

CREATE SEQUENCE my_seq

START WITH 394

INCREMENT BY 12

NOMINVALUE

NOMAXVALUE

NOCYCLE

NOCACHE;

用户执行包含my_seq.NEXTVAL的SQL语句三次,然后执行包含 my_seq.CURRVAL的SQL语句四次,请问序列my_seq的当前值是( )。

A、406

B、418

C、430

D、442

E、242:

答案:B

26、在Oracle中,下列哪种标量类型不能保存到数据库表中( )。

A、CHAR

B、RAW

C、DATE

D、BOOLEAN

答案:B

27、在Oracle中,不属于游标属性的是( )。

A、%NOTFOUND

B、%FOUND

C、%ISCLOSE

D、%ISOPEN

答案:C

28、在Oracle中,用下列语句定义了一个过程:

CREATE OR REPLACE PROCEDURE test(a IN VARCHAR2,

b IN OUT NUMBER,

c OUT VARCHAR2) IS

BEGIN

……

END;

/

假定使用的变量都已定义,下面对过程test的调用语法正确的是( )。

A、test(‘String1’,50,v_str2)

B、test(v_str1,v_num1,’String2’)

C、test(‘String1’,v_num1,v_str2)

D、test(v_str1,20,v_str2)

答案:C

29、在Oracle中,关于程序包的描述不正确的是( )。

A、程序包是一种数据库对象,它是对相关PL/SQL类型、子程序、游标、异常、变量和常量的封装

B、程序包中私有对象是通过PRIVATE关键字来标识的 程序包体可以包括没有在程序包说明中列出的对象,这些是私有对象,程序包的用户不能使用

C、PL/SQL允许两个或多个打包的子程序具有同一名称,只要子程序接受的参数数据类型不同

D、程序包具有模块化、信息隐藏、新增功能及性能更佳等优点

答案:B

30、在Oracle中,用户( )拥有所有内置的程序包。

A、SYS

B、SYSTEM

C、PUBLIC

D、DEFAULT

答案:A

31、在Oracle中,关于触发器的描述正确的是( )。

A、触发器可以删除,但不能禁用

B、触发器只能用于表

C、触发器可以分为行级和语句级

D、触发器使一个对关联表发出select、insert、update或delete语句时触发的存储过程

答案:D

32、在Oracle中,事务中使用下列SQL语句不会引起锁定( )。

A、SELECT

B、INSERT

C、UPDATE

D、DELETE

答案:A

33、在Oracle中,当需要使用显式游标更新或删除游标中的行时,声明游标时指定的SELECT语句必须带有( )子句。

A、WHERE CURRENT OF

B、INTO

C、FOR UPDATE

D、ORDER BY

答案:C

34、在Windows操作系统中,Oracle的( )服务器监听并接受来自客户端应用程序的连接请求。

A、OracleHOME_NAMETNSListener

B、OracleServiceSID

C、OracleHOME_NAMEAgent

D、OracleHOME_NAMEHTTPServer

答案:A

35、在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值增加的是( )。

A、select seq.ROWNUM from dual;

B、select seq.ROWIDfrom dual;

C、select seq.CURRVALfrom dual;

D、select seq.NEXTVALfrom dual;

答案:C

36、ORACLE中,执行语句:SELECT address1||’,'||address2||’,'||address2 ”Address” FROM employ;将会返回( )列。

A、0

B、1

C、2

D、3

答案:B

37、在Oracle中,INSTEAD OF触发器主要用于( )。

A、表

B、表和视图

C、基于单个表的视图

D、基于多个表的视图

答案:D

38、Oracle数据库中,下面( )可以作为有效的列名。

A、Column

B、123_NUM

C、NUM_#123

D、#NUM123

答案:C

39、在Oracle中,以下工具可以逻辑备份数据库对象或整个数据库( )。

A、SQL*Plus

B、导出实用程序

C、导入实用程序

D、SQL*Loader

答案:B

40、Oracle数据库中,通过( )访问能够以最快的方式访问表中的一行。

A、主键

B、Rowid

C、唯一索引

D、整表扫描

答案:B

41、在Oracle中,使用下列的语句产生序列: CREATE SEQUENCE id; Oracle服务器会预开辟内存并维持的序列值有( )个。

A、0

B、10

C、20

D、100

答案:C

42、Oracle数据库中,以下( )命令可以删除整个表中的数据,并且无法回滚。

A、drop

B、delete

C、truncate

D、cascade

答案:C

43、Oralce数据库中,以下( )函数可以针对任意数据类型进行操作。

A、TO_CHAR

B、LOWER

C、MAX

D、CEIL

答案:A

44、在Oracle中,语句( )将ORDER_DATE日期值’2000年3月18日’显示为‘2000年1月1日’。

A、SELECT ROUND(order_date,’day’)FROM inventory

B、SELECT ROUND(order_date,’YEAR’)FROM inventory

C、SELECT ROUND(order_date,’month’)FROM inventory

D、SELECT ROUND(to_char(order_date,’yyyy’))FROM inventory

答案:B

45、在Oracle中,以下是STUDENTS表的结构: SID NUMBER NOT NULL,Primary Key SNAME VARCHAR2(30) COURSE_ID VARCHAR2(10) NOT NULL MARKS NUMBER"sql hljs">SID NUMBER NOT NULL,Primary Key SNAME VARCHAR2(30) COURSE_ID VARCHAR2(10) NOT NULL MARKS NUMBER 你需要查询参加了课程ID为C10的考试,并且分数排在前10名的学生,以下( )语句能够实现此功能。

A、SELECT SID,marks,ROWNUM “Rank”

FORM students

WHERE ROWNUM<=10 AND course_id=’C10′

ORDER BY marks DESC;

B、SELECT SID,marks,ROWNUM”Rank”

FORM students

WHERE ROWNUM<=10 AND course_id=’C10′

ORDER BY marks;

C、SELECT SID,marks,ROWNUM”Rank”

FORM (SELECT SID ,marks

FORM students

WHERE ROWNUM<=10 AND course_id=’C10′

ORDER BY marks DESC;

D、SELECT SID,marks,ROWNUM”Rank”

FORM (SELECT SID ,marks

FORM students

WHERE course_id=’C10′ ORDER BY marks DESC)

WHERE ROWNUM<=10;

答案:D

46、在Oracle中,用于PL/SQL程序输出调试信息的内置程序包是

A、DBMS_STANDARD

B、DBMS_ALERT

C、DBMS_LOB

D、DBMS_OUTPUT

答案:D

47、在Oracle中,用下列语句定义了一个过程:

CREATE PROCEDURE proc(value1 IN VARCHAR2,value2 OUT NUMBER,value3 IN OUT VARCHAR2)

IS

BEGIN

……

END;

假定使用的变量都已定义,下面对过程proc的调用语法正确的是( )。

A、proc(‘tt’,10,v3)

B、proc(‘tt’,v2,v3)

C、proc(v1,v2,v3)

D、proc(‘tt’,10,’dd’)

答案:B

48、在Oracle中,使用以下语句创建视图:

CREATE OR REPLACE VIEW MyView

AS SELECT * FROM orders

Where status=’p';

假定orders表中包含10条status=’p'的记录,当用户试图执行以下语句: UPDATE MyView SET status=’o’ WHERE status=’p'; 下列描述正确的是()。

A、Oracle不执行更新操作,并返回错误信息

B、Oracle成功执行更新操作,再次查看视图时返回0行记录

C、Oracle成功执行更新操作,再次查看视图时返回10行记录

D、Oracle执行更新操作,但提示错误信息

答案:C

49、在Oracle中,下列( )语句不能用于控制游标。

A、Open

B、Create

C、Fetch

D、Close

答案:B

50、在Oracle中,在执行SQL语句时,你不小心使用Update命令将所有的ID值设置成了11111,那么使用( )命令可以取消这一操作。

A、EXIT

B、COMMIT

C、ROLLBACK

D、UNDO

答案:C

51、在Oracle中,数据库中的触发器是一个对关联表发出insert、update或( )语句时触发的存储过程。

A、delete

B、drop

C、create

D、truncate

答案:A

52、在Oracle 中,使用了如下的语句创建用户TOM,则对于该用户而言,以下说法错误的是( )。CREATE USER TOM IDENTIFIED BY TOMSYS

A、该用户的口令为TOMSYS

B、TOM默认为表空间为SYSTEM

C、TOM 的临时表空间为TEMP

D、使ORANT UPDATE 命令可以修改TOM的口令

答案:D

53、在Oracle中,下述( )命令会使挂起的事务完成。。

A、COMMIT

B、DELETE

C、UPDATE

D、SELECT

E、INSERT

答案:A

54、游标变量的类型是( )

A、隐式游标

B、显示游标

C、REF游标

D、循环游标

答案:B

55、在非归档方式下操作的数据库禁用了( )。

A、归档日志。

B、联机日志。

C、日志写入程序。

D、日志文件。

答案:A

56、由于软硬件问题导致的读写数据库文件失败,属于( )故障。

A、实例

B、语句

C、用户进程

D、介质

答案:D

57、( )参数用于确定是否要导入整个导出文件

A、constranints

B、tables

C、full

D、file

答案:C

58、在oracle程序中处理语句时发生的逻辑错误导致( )故障

A、实例

B、介质

C、语句

D、用户进程

答案:C

59、( )方式的导出会从指定的表中导出所有的数据。

A、分区

B、表

C、全部数据库

D、表空间

答案:B

60、使用( )命令可查看在创建触发器时发生的编译错误

A、View errors

B、Show errors

C、Display errors

D、Check errors

答案:B

61、( )包用于显示pl/sql块和存储过程中的调试信息

A、Dbms_output。

B、Dbms_standadr。

C、Dbms_Input。

D、Dbms_session。

答案:A

62、( )触发器允许触发操作的语句访问行的列值

A、行级 :old :new

B、语句级

C、模式

D、数据库级

答案:A

63、要审计用户执行的create,drop,和alter等ddl语句,应创建( )触发器

A、行级

B、语句级

C、Instead of

D、模式

E、数据库

答案:E

64、Oracle内置程序包由( )用户所有

A、sys

B、system

C、scott

D、Pub lic

答案:A

65、( )程序包用于读写操作系统文本文件

A、Dbms_output

B、Dbms_lob (图片,电影)

C、Dbms_random

D、Utl_file

答案:D

66、子程序的( )模式参数可以在调用子程序时指定一个常量

A、in

B、out

C、In out

D、inout

答案:A

67、下面关于主事务处理和自主事务处理的说法错误的是( )

A、自主事务处理结果的变化不倚赖于主事务处理的状态

B、自主事务处理提交或回退时,不影响主事务处理的结果

C、自主事务处理提交,对主事务处理是不可见的

D、自主事务处理还可以启动其他自主事务处理

答案:D

68、 在Oracle中,下面关于函数描述正确的是( )。

A、SYSDATE函数返回Oracle服务器的日期和时间

B、ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数

C、ADD_MONTHS日期函数返回指定两个月份天数的和

D、SUBSTR函数从字符串指定的位置返回指定长度的子串

答案:AD

69、在Oracle中,当从SQL表达式调用函数时,下列描述不正确的是( )。

A、从SELECT语句调用的函数均不能修改数据库表

B、函数可以带有IN、OUT等模式的参数

C、函数的返回值必须是数据库类型,不得使用PL/SQL类型

D、形式参数必须使用数据库类型,不得使用PL/SQL类型

答案:AC

70、在Oracle中,在SQL提示符下调用PL/SQL过程的方法是()。

A、使用CALL语句

B、使用EXECUTE语句

C、使用RUN语句

D、直接使用过程名

答案:ABC

71、在Oracle中有表”cd”,它包含属性”cdcode”,”category”和”cdname”,要查询category取值为”CLASSIC”或”ROCK”的行,应采用语句( )。

A、SELECT * FROM cd WHERE category IN (‘CLASEIC’,'ROCK’);

B、SELECT * FROM cd WHERE category BETWEEN ‘CLASSIC’ AND ‘ROCK’;

C、SELECT * FROM cd WHERE category=’CLASSIC’ AND category=’ROCK’;

D、SELECT * FROM cd WHERE category=’CLASSIC’ OR category=’ROCK’;

答案:AD

72、在Oracle中,通过命令( )可以释放锁。(选择两项)

A、INSERT

B、DELETE

C、ROLLBACK

D、COMMIT

答案:CD

73、执行特定任务的子程序是( )

A、函数

B、过程。

C、程序包

D、游标。

答案:AB





1.       查询员工表所有数据, 并说明使用*的缺点      

答案:

select * from emp;

使用*的缺点有:查询出了不必要的列;效率上不如直接指定列名。

2.       查询职位(JOB)为'PRESIDENT'的员工的工资

答案:

select * from emp where job = 'PRESIDENT';

3.       查询佣金(COMM)为0或为NULL的员工信息

答案:

select * from emp where comm = 0 or comm is null;

4.       查询入职日期在1981-5-1 到1981-12-31之间的所有员工信息

答案:

select * from emp where hiredate

between to_date('1981-5-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd');

5.       查询所有名字长度为4 的员工的员工编号,姓名

答案:

select * from emp where length(ename) = 4;

6.       显示10 号部门的所有经理('MANAGER')和20号部门的所有职员('CLERK')的详细信息

答案:

select * from emp where deptno = 10 and job = 'MANAGER' or deptno = 20 and job='CLERK';

7.       显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息

答案:

select * from emp where ename not like '%L%' or ename like '%SM%';

8.       显示各个部门经理('MANAGER')的工资

答案:

select sal from emp where job = 'MANAGER';

9.       显示佣金(COMM)收入比工资(SAL)高的员工的详细信息

答案:

select * from emp where comm > sal;

10.    把hiredate列看做是员工的生日,求本月过生日的员工

答案:

select * from emp where to_char(hiredate, 'mm') = to_char(sysdate , 'mm');

11.    把hiredate列看做是员工的生日,求下月过生日的员工

答案:

select * from emp where to_char(hiredate, 'mm') = to_char(add_months(sysdate,1) ,'mm');

12.    求1982年入职的员工

答案:

select * from emp where to_char(hiredate,'yyyy') = '1982';

13.    求1981年下半年入职的员工

答案:

select * from emp where hiredate

between to_date('1981-7-1','yyyy-mm-dd') and to_date('1982-1-1','yyyy-mm-dd') - 1;

14.    求1981年各个月入职的的员工个数

答案:

select count(*), to_char(trunc(hiredate,'month'),'yyyy-mm')

from emp where to_char(hiredate,'yyyy')='1981'

group by trunc(hiredate,'month')

order by trunc(hiredate,'month');

15.    查询各个部门的平均工资

答案:

select deptno,avg(sal) from emp group by deptno;

16.    显示各种职位的最低工资

答案:

select job,min(sal) from emp group by job;

17.    按照入职日期由新到旧排列员工信息

答案:

select * from emp order by hiredate desc;

18.    查询员工的基本信息,附加其上级的姓名

答案:

select e.*, e2.ename from emp e, emp e2 where e.mgr = e2.empno;

19.    显示工资比'ALLEN'高的所有员工的姓名和工资

答案:

select * from emp where sal > (select sal from emp where ename='ALLEN');

20.    显示与'SCOTT'从事相同工作的员工的详细信息

答案:

select * from emp where job = (select * from emp where ename='SCOTT');

21.    显示销售部('SALES')员工的姓名

答案:

select ename from emp e, dept d where e.deptno = d.deptno and d.dname='SALES';

22.    显示与30号部门'MARTIN'员工工资相同的员工的姓名和工资

答案:

select ename, sal from emp

where sal = (select sal from emp where deptno=30 and ename='MARTIN');

23.    查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN')

答案:

select * from emp where job='SALESMAN' and sal > (select avg(sal) from emp);

24.    显示所有职员的姓名及其所在部门的名称和工资

答案:

select ename, job, dname from emp e, dept d where e.deptno = d.deptno;

25.    查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地

答案:

select empno,ename,dname,loc from emp e, dept d

where e.deptno = d.deptno and danme='RESEARCH';

26.    查询各个部门的名称和员工人数

答案:

select * from (select count(*) c, deptno from emp group by deptno) e

inner join dept d on e.deptno = d.deptno;

27.    查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位

答案:

select job, count(*) from emp where sal > (select avg(sal) from emp) group by job;

28.    查询工资相同的员工的工资和姓名

答案:

select * from emp e where (select count(*) from emp where sal = e.sal group by sal)> 1;

29.    查询工资最高的3名员工信息

答案:

select * from (select * from emp order by sal desc) where rownum <= 3;

30.    按工资进行排名,排名从1开始,工资相同排名相同(如果两人并列第1则没有第2名,从第三名继续排)

答案:

select e.*, (select count(*) from emp where sal > e.sal)+1 rank from emp e order byrank;

31.    求入职日期相同的(年月日相同)的员工

答案:

select * from emp e where (select count(*) from emp where e.hiredate=hiredate)>1;

32.    查询每个部门的最高工资

答案:

select deptno, max(sal) maxsal from emp group by deptno order by deptno;

33.    查询每个部门,每种职位的最高工资

答案:

select deptno, job, max(sal) from emp group by deptno, job order by deptno, job;

34.    查询每个员工的信息及工资级别

答案:

select e.*, sg.grade from emp e, salgrade sg where sal between losal and hisal;

35.    查询工资最高的第6-10名员工

答案:

select * from (

select e.*,rownum rn from

(select * from emp order by sal desc) e

where rownum <=10)

where rn > 5;

36.    查询各部门工资最高的员工信息

答案:

select * from emp e where e.sal = (select max(sal) from emp where (deptno =e.deptno));

37.    查询每个部门工资最高的前2名员工

答案:

select * from emp e where

(select count(*) from emp where sal > e.sal and e.deptno = deptno) < 2

order by deptno, sal desc;

38.    查询出有3个以上下属的员工信息

答案:

select * from emp e where

(select count(*) from emp where e.empno = mgr) > 2;

39.    查询所有大于本部门平均工资的员工信息

答案:

select * from emp e where sal >

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

order by deptno;

40.    查询平均工资最高的部门信息

答案:

select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group bydeptno) se

where avgsal = (select max(avg(sal)) from emp group by deptno) and d.deptno =se.deptno;

41.    查询大于各部门总工资的平均值的部门信息

答案:

select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group bydeptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno =d.deptno;

42.    查询大于各部门总工资的平均值的部门下的员工信息

答案:

select e.*,sumsal from emp e, (select sum(sal) sumsal, deptno from emp group bydeptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno =e.deptno;

43.    查询没有员工的部门信息

答案:

select d.* from dept d left join emp e on (e.deptno = d.deptno) where empno is null;

44.    查询当前月有多少天

答案:

select trunc(add_months(sysdate,1),'month') - trunc(sysdate,'month') from dual;

45.    列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数

答案:

SELECT job,COUNT(empno)

FROM emp

GROUP BY job HAVING MIN(sal)>1500 ;

46.    列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级

答案:

SELECT e.empno,e.ename,d.dname,m.ename,s.grade

FROM emp e,dept d,emp m,salgrade s

WHERE sal>(SELECT AVG(sal) FROM emp) AND e.mgr=m.empno AND d.deptno=e.deptno(+)AND e.sal BETWEEN s.losal AND s.hisal ;

47.    列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称

答案:

SELECT e.ename,e.sal,d.dname FROM emp e,dept d

WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30) AND e.deptno=d.deptno;

48.    列出所有部门的详细信息和部门人数

答案:

SELECT d.dname,d.loc,dt.count

FROM dept d,(SELECT deptno,COUNT(*) count FROM emp GROUP BY deptno) dt

WHERE d.deptno=dt.deptno ;

49.    显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列

答案:

SELECT job,SUM(sal) sum

FROM emp

WHERE job<>'SALESMAN'

GROUP BY job HAVING sum>5000

ORDER BY sum ;

50.    客户表a(id name address) 登陆流水表b(id time) 购物流水表c(id time productid productnum)
1.求每个客户的最新登陆时间time,姓名name,客户id?

答案:

select a.id,a.name,d.time as time 
from a left join (select id,max(time) as time from b group by id) d
on a.id =d.id ;

2.查最新登陆并且已经购买商品的客户id,name,登陆的时间time(一条sql语句)

答案:

select a.id,a.name,d.time as time 
from a,(select id,max(time) as time from b group by id) d
where a.id =d.id 
and exists (select * from c where id = a.id);



这篇关于数据库之Oracle笔试面试题收集(来自网络)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!