问题:
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);