数据库程序员面试分类真题8_第1页
数据库程序员面试分类真题8_第2页
数据库程序员面试分类真题8_第3页
数据库程序员面试分类真题8_第4页
数据库程序员面试分类真题8_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库程序员面试分类真题8简答题1.

在Oracle中,什么是异常?正确答案:异常(Exception)处理是用来处理正常执行过程中未预料到的事件,包括程序块的异常处理、预定义的错误和自定义错误。(江南博哥)如果PL/SQL程序块一旦产生异常,而程序并没有指出如何处理,那么程序就会自动终止运行。

异常处理部分一般放在PL/SQL程序体的后半部分,结构如下。

EXCEPTION

WHENfirst_exception

THEN

<codetohandlefirstexertion>

WHENsecond_exception

THEN

<codetohandlesecondexception>

WHENOTHERSTHEN<codetohandleOTHERSexception>[考点]程序处理

2.

Oracle的异常可以分为哪几类?正确答案:Oracle将异常分为预定义异常、非预定义异常和自定义异常三种。

1.预定义异常(Predefined)

当PL/SQL应用程序违反了Oracle规定的限制时,就会隐含地触发一个内部异常,这就是预定义异常。预定义异常用于处理常见的Oracle错误,对这种异常情况的处理,无须在程序中定义,由Oracle自动将其触发。它们全部放在PL/SQL自带的标准包中,这样程序员就无须再次定义了。预定义异常大约有20多个,下表是一些常见的预定义异常。错误号异常错误信息名称说明ORA-01403NO_DATA_FOUNDSELECTINTO没有找到数据ORA-01422TOO_MANY_ROWSSELECTINTO返回多行ORA-06501PROGRAM_ERROR内部错误,需重新安装数据字典视图和PL/SQL包ORA-06511CURSOR_ALREADY_OPEN试图打开一个已存在的游标ORA-06530ACCESS_INTO_NULL试图为NULL对象的属性赋值ORA-01012NOT_LOGGED_ON没有连接到OracleORA-01001INVALID_CURSOR试图使用一个无效的游标ORA-00061TRANSACTION_BACKED_OUT由于发生死锁事务被撤销ORA-00051TIMEOUT_ON_RESOURCE在等待资源时发生超时ORA-00001DUP_VAL_ON_INDEX试图破坏一个唯一性限制ORA-01017LOGIN_DENIED无效的用户名/口令ORA-01476ZERO_DIVIDE试图被零除ORA-01722INVALID_NUMBER转换一个数字失败ORA-06500STORAGE_ERROR内存不够或内存被破坏触发的内部错误ORA-06502VALUE_ERROR赋值操作,变量长度不足,触发该异常ORA-06504ROWTYPE_MISMATCH宿主游标变量与PL/SQL变量有不兼容行类型ORA-06531COLLECTION_IS_NULL试图给没有初始化的嵌套表变量或者VARRY变量赋值ORA-06532SUBSCRIP_OUTSIDE_LIMIT对嵌套或VARRAY索引使用了负数ORA-06533SUBSCRIPT_BEYOND_COUNT对嵌套或VARRAY索引的引用大于集合中元素的个数

2.非预定义异常(NonPredefined)

非预定义异常用于处理预定义异常不能处理的异常,即其他标准的Oracle错误。使用预定义异常只能处理系统预定义的20多个Oracle错误,而当使用PL/SQL开发应用程序时,可能会遇到其他的一些Oracle错误。例如,在PL/SQL块中执行DML语句时违反了约束规定等。在这样的情况下,就可以使用非预定义异常来处理。

Oracle提供了2个函数SQLCODE和SQLERRM用于返回错误信息。

1)SQLCODE:返回错误代码。

2)SQLERRM:返回与错误代码关联的消息。

这样就可以在错误日志表中记录程序在执行过程中发生的错误信息了。

3.自定义异常(User_define)

自定义异常用于处理与Oracle错误无关的其他情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其触发。

预定义异常和自定义异常都是与Oracle错误相关的,并且出现的Oracle错误会隐含地触发相应的异常;而自定义异常与Oracle错误没有任何关联,它是由开发人员为特定情况所定义的异常。当与一个异常相关的错误出现时,就会隐含触发该异常。用户定义异常是通过显式使用RAISE语句来触发。当触发一个异常时,控制程序就转到异常块部分,执行错误处理代码。[考点]程序处理

3.

在Oracle中,抛出异常有哪几种方式?正确答案:有三种方式可以抛出异常,分别是通过PL/SQL运行引擎、使用RAISE语句和调用RAISE_APPLICATION_ERROR存储过程。

当数据库或PL/SQL在运行时发生了错误,此时的异常可以通过PL/SQL运行时的引擎自动抛出异常,这个无须过度关注。第二种是通过RAISE语句抛出异常。显式抛出异常是程序员处理声明异常的习惯用法,但RAISE不限于声明了的异常,它可以抛出任何异常。比如下面一个订单输入的例子,若订单大于库存数量,则抛出异常,并且捕获该异常、处理该异常。

第三种抛出异常的办法是通过RAISE_APPLICATION_ERROR语句。RAISE_APPLICATION_ERROR是一个内建函数,它用于抛出一个异常并给异常赋予一个错误号以及错误信息,它将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQL*Plus或者其他前台开发语言)。该函数可以在PL/SQL程序块的执行部分和异常部分被调用。

RAISE_APPLICATION_ERROR的声明:

RAISE_APPLICATION_ERROR(ERROR_NUMBERINNUMBER,MESSAGEINVARCHAR2[,TRUE,FALSE]))

错误号的范围是-20000~-20999,这样就不会与Oracle的任何错误代码发生冲突。错误信息是文本字符串,最多为2048B。TRUE和FALSE表示是添加(TRUE)错误堆栈(ERRORSTACK)还是覆盖(OVERWRITE)错误堆栈(FALSE)。默认情况下是FALSE。

RAISE_APPLICATION_ERROR使用示例如下:

IFPRODUCT_NOT_FOUNDTHEN

RAISE_APPLICATION_ERROR(-20123,'INVALDPRODUCTCODE',TRUE);

ENDIF;

需要说明的一点,当该函数用于触发器并且触发事件在以下情况的时候并不能抛出错误:

1)触发事件为“AFTERSTARTUPONDATABASE”或“BEFORESHUTDOWNONDATABASE”。

2)触发事件为“AFTERLOGONONDATABASE”且用户拥有“ADMINISTERDATABASETRIGGER”权限。

3)触发事件为“AFTERLOGONONSCHEMA”且用户拥有“ALTERANYTRIGGER”权限。[考点]程序处理

4.

如何捕获存储过程中出现异常的行号?正确答案:使用函数DBMS_UTILITY.FORMAT_ERROR_BACKTRACE可以获取到出现异常时候的程序的行号,而函数DBMS_UTILITY.FORMAT_ERROR_STACK可以获取到出现异常时的错误信息,作用和SQLERRM一样。[考点]程序处理

5.

Oracle中的触发器有哪些类型?正确答案:Oracle数据库有4种触发器,分别是DML触发器、替代触发器(INSTEADOF触发器)、DDL触发器和系统触发器。一般的应用系统中都使用到DML触发器和替代触发器,而DDL和系统触发器是DBA管理数据库用得比较多。下图是Oracle触发器的分类图。

6.

Oracle的自治事务是什么?正确答案:Oracle的自治事务(AutonomousTransaction)是将一个主事务分割成几个子事务,在执行完子事务以后再继续执行主事务。这里的关键是,子事务是独立于主事务的,子事务中的ROLLBACK和COMMIT操作只会影响子事务中的DML操作;同样,主事务中的ROLLBACK和COMMIT操作只会影响主事务中的DML操作,而不会影响子事务中的操作。在子事务中已经COMMIT的操作,不会被主事务中的ROLLBACK撤销。

可以在程序开头使用如下命令实现自治事务:

PRAGMAAUTONOMOUS_TRANSACTION;

定义自治事务必须遵循以下规则:

1)如果要被定义为自治事务的程序是匿名的,那么它必须是一个最外层的程序块。

2)如果要被定义为自治事务的程序不是匿名的,那么它必须是函数或者存储过程。在一个包中,只有其中的函数或存储过程能够被定义成自治事务。整个包不能声明为自治事务。

3)一个对象的方法可以声明为自治事务。

4)触发器可以声明为自治事务。

5)内嵌程序块不能声明为自治事务。

需要注意的是,对于一个匿名的自治事务程序块来说,只有这个块的BEGIN和END之间的代码被看作是自治事务。

自治事务可以用来解决“ORA-14551:无法在查询中执行DML操作”错误。触发器无法包含COMMIT语句,除非有PRAGMAAUTONOMOUS_TRANSACTION标记。但是,只有触发中的语句才能被提交,主事务则不行。[考点]程序处理

7.

Oracle常用日期处理函数有哪些?这些函数可以实现哪些功能?正确答案:有关日期函数需要了解以下几点:

1)日期函数用于处理DATE类型的数据。

2)在日期上加上或减去一个数字结果仍为日期。

3)两个日期相减返回日期之间相差的天数。

4)默认情况下,日期格式为DD-MON-RR。

5)查询当前数据库日期格式的命令:SELECTSYS_CONTEXT('USERENV','NLS_DATE_FORMAT')FROMDUAL;。

6)SYSDATE:该函数返回系统时间。

7)LAST_DAY(D):返回指定日期所在月份的最后一天。

8)MONTHS_BETWEEN:表示两个日期的月份之差,即在给定的两个日期之间有多少个月。

9)ADD_MONTHS(D,N):该函数将给定的日期增加N个月。当N为正数时,该函数将给定的日期增加N个月,为负数时减去N个月。该函数很常用,可以用来表示上个月、下个月、去年和下一年等。

10)NEXT_DAY(D,N):返回以时间点D为基准(开始),下一个“目标日N”的日期。

由于数据库以数字方式存储日期,因此,日期类型可以进行算术运算(加法或减法)。例如,可以

给日期增加或减去一个数字,得到的结果还是一个日期值,两个日期相减,得到两个日期之间的天数,

用小时除以24就可以得到天数。

另外,日期中常用到的一个修改日期语言的SQL:

修改为英文:ALTERSESSIONSETNLS_LANGUAGE='AMERICAN';

修改为中文:ALTERSESSIONSETNLS_LANGUAGE='SIMPLIFIEDCHINESE';

在英语的环境中,查询星期时要用英文,示例代码如下:

SYS@lhrdb21>SELECTNEXT_DAY(SYSDATE,'星期二')FROMDUAL;

SELECTNEXT_DAY(SYSDATE,'星期二')FROMDUAL

*

ERRORatline1;

ORA-01846:notavaliddayoftheweek

SYS@lhrdb21>ALTERSESSIONSETNLS_LANGUAGE='SIMPLIFIEDCHINESE';

会话已更改

SYS@lhrdb21>SELECTNEXT_DAY(SYSDATE,'星期二')FROMDUAL;

NEXT_DAY(SYSDATE,'

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

2016-09-1309:32:58[考点]函数相关

8.

如何判断一个字符串是否含有中文汉字?正确答案:可以利用LENGTH、LENGTHB和TO_SINGLE_BYTE函数来解决这个问题。其中,LENGTH返回以字符为单位的长度,LENGTHB返回以字节为单位的长度,TO_SINGLE_BYTE将字符串中的多字节字符转化为单字节字符。此外,还可以使用ASCIISTR和CONVERT函数找出包含汉字的字符串。若利用LENGTH、LENGTHB和TO_SINGLE_BYTE函数来实现该需求,则类似的WHERE条件为“LENGTHB(COL)<>LENGTH(COL)ANDLENGTHB(TO_SINGLE_BYTE(COL))<>LENGTH(TO_SINGLE_BYTE(COL))”。[考点]函数相关

9.

如何计算一个字符在字符串中出现的次数?正确答案:可以利用REGEXP_COUNT、REGEXP_REPLACE或TRANSLATE系统函数,也可以自定义函数来计算一个字符在字符串中出现的次数。[考点]函数相关

10.

在Oracle中,如何判断一个字符串是否为数字?正确答案:可以有2种办法来判断,第一种办法为REPLACE加TRANSLATE函数,在程序中可以直接使用“TRANSLATE(REPLACE('入参','.',"),'/1234567890','/')ISNULL”来判断入参为数字,缺点是,若入参有2个小数点或含有加减号则不能判断。第二种办法为使用TO_NUMBER或REGEXP_LIKE来自定义函数进行判断。[考点]函数相关

11.

如何将一个IP地址分解为4个字段?正确答案:使用Oracle的正则表达式函数REGEXP_SUBSTR,如下:

SYS@lhrdb>SELECTREGEXP_SUBSTR(V.IP,'[^.]+',1,1)A,

2

REGEXP_SUBSTR(V.IP,'[^.]+',1,2)B,

3

REGEXP_SUBSTR(V.IP,'[^.]+',1,3)C,

4

REGEXP_SUBSTR(V.IP,'[^.]+',1,4)D

5

FROM

(SELECT'192.168.59.130'

IPFROMDUAL)V;

A

B

C

D

192168

59

130[考点]函数相关

12.

动态SQL是什么?正确答案:在PL/SQL开发过程中,使用SQL或PL/SQL可以实现大部分的需求,但是,在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,例如,需要动态建表或执行某个不确定的操作的时候,就需要动态执行。此外,DDL语句及系统控制语句也不能在PL/SQL中直接使用,这就需要使用动态SQL来实现。因此,在Oracle数据库开发PL/SQL块中,可以把SQL分为静态SQL和动态SQL。所谓静态SQL指的是在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。动态SQL允许在SQL客户模块或嵌入式宿主程序的执行过程中执行动态生成的SQL语句,动态SQL语句在程序编译时尚未确定。其中,有些部分需要在程序执行过程中临时生成的SQL语句,SQL标准引入动态SQL的原因是由于静态SQL不能提供足够的编程灵活性。

动态SQL是使用EXECUTEIMMEDIATE语句来实现的。[考点]高级操作

13.

假定SERV表有A、B、C三个字段:SERV(ANUMBER(10),BNUMBER(10),CNUMBER(10))。表SERV的内容如下:ABC110702305011080

以下两段PL/SQL的功能是根据A列的值,查找出对应B列的值赋予变量X,请分别判断这两段PL/SQL是否能正常执行,若不能正常执行,请指出错误的原因并修改。

1)

DECLARE

XNUMBER;

BEGIN

SELECTBINTOXFROMSERVWHEREA=1;

DBMS_OUTPUT.PUT_LINE(TO_CHAR(X));

END;

2)

DECLARE

XNUMBER;

BEGIN

SELECTBINTOXFROMSERVWHEREA=2;

DBMS_OUTPUT.PUT.LINE(TO_CHAR(X));

END:正确答案:这两段程序除了WHERE语句后的值不同以外,其他均一样。对于程序1),当A=1时,返回了2行记录;对于程序2),当A=2时,返回了1行记录。对于变量X而言,只能接受一个值,所以,程序2)执行不报错,程序1)执行报错:ORA-01422:exactfetchreturnsmorethanrequestednumberofrows。

对于程序1)有两种修改方法,第一种就是将“SELECTBINTOXFROMSERVWHEREA=1;”修改为“SELECTDISTINCTBINTOXFROMSERVWHEREA=1;”。第二种方法就是返回集合类型,修改后的程序块如下:

DECLARE

VARCURSORSYS_REFCURSOR;

X

SERV%ROWTYPE;

BEGIN

OPENVARCURSORFORSELECTT.*FROMSERVTWHEREA=1;

LOOP

FETCHVARCURSORINTOX;

EXITWHENVARCURSOR%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(R.B);

ENDLOOP;

END;[考点]高级操作

14.

行列互换有哪些方法?正确答案:行列转换包括以下六种情况:①列转行;②行转列;③多列转换成字符串;④多行转换成字符串;⑤字符串转换成多列;⑥字符串转换成多行。其中,重点是行转列和字符串转换成多行。[考点]高级操作

15.

数据库中有一张如下所示的表,表名为SALES。年季度销售量19911111991212199131319914141992121199222219923231992424要求:写一个SQL语句查询出如下所示的结果。年一季度二季度三季度四季度199111121314199221222324正确答案:这是一道行转列的题目,首先建立表SALES:

CREATETABLESALES(年

NUMBER,季度NUMBER,销售量NUMBER);

INSERTINTOSALESVALUES(1991,1,11);

INSERTINTOSALESVALUES(1991,2,12);

INSERTINTOSALESVALUES(1991,3,13);

INSERTINTOSALESVALUES(1991,4,14);

INSERTINTOSALESVALUES(1992,1,21);

INSERTINTOSALESVALUES(1992,2,22);

INSERTINTOsALESVALUES(1992,3,23);

INSERTINTOSALESVALUES(1992,4,24);

SELECT*FROMSALES;

此题若使用聚合函数+DECODE或CASE来回答,则代码如下:

SELECT年,

SUM(CASEWHEN季度=1THEN销售量ELSE0END)AS一季度,

SUM(CASEWHEN季度=2THEN销售量ELSE0END)AS二季度,

SUM(CASEWHEN季度=3THEN销售量ELSE0END)AS三季度,

SUM(CASEWHEN季度=4THEN销售量ELSE0END)AS四季度

FROMSALESGROUPBY年ORDERBYT.教师号;

此题若使用PIVOT函数,则代码如下:

SELECT*FROMSALESPIVOT(SUM(销售量)FOR季度IN(1AS“一季度",2AS"二季度",3AS"三季度",4AS"四季度"))ORDERBY1;

此题若使用临时表的方式,则代码如下:

SELECTT.年,NVL(SUM(T1.一季度),0)AS"一季度",NVL(SUM(T2.二季度),0)AS"二季度",

NVL(SUM(T3.三季度),0)AS"三季度",

NVL(SUM(T4.四季度),0)AS"四季度"

FROM(SELECT年,销售量AS"一季度"FROMSALESAWHEREA.季度='1')T1,

(SELECT年,销售量AS"二季度"FROMSALESAWHEREA.季度='2')T2,

(SELECT年,销售量AS"三季度"FROMSALESAWHEREA.季度='3')T3,

(SELECT年,销售量AS"四季度"FROMSALESAWHEREA.季度='4')T4,

(SELECTDISTINCT年FROMSALES)T

WHERET.年=T1.年(+)ANDT.年=T2.年(+)ANDT.年=T3.年(+)ANDT.年=T4.年(+)

GROUPBYT.年ORDERBY1;[考点]高级操作

16.

如何删除表中重复的记录?正确答案:在平时工作中可能会遇到这种情况,当试图对表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录。这个时候只能创建普通索引或者删除重复记录后再创建唯一索引。

重复的数据可能有这样两种情况:第一种是表中只有某些字段一样,第二种是两行记录完全一样。删除重复记录后的结果也分为两种,第一种是重复的记录全部删除,第二种是重复的记录只保留最新的一条记录。在一般业务中,第二种的情况较多。

1.删除重复记录的方法原理

在Oracle中,每一条记录都有一个ROWID,ROWID在整个数据库中是唯一的,ROWID确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列上的内容都相同,但ROWID不会相同,所以,只要保留重复记录中那些具有最大的ROWID的记录,其余的全部删除。

2.删除重复记录的方法

若想要删除部分字段重复的数据,则使用下面语句进行删除,下面的语句是删除表中字段1和字段2重复的数据:

DELETEFROM表名WHERE(字段1,字段2)IN(SELECT字段1,字段2FROM表名GROUPBY字段1,字段2HAVINGCOUNT(1)>1);

也可以利用临时表的方式,先将查询到的重复的数据插入一个临时表中,然后进行删除,这样,执行删除的时候就不用再进行一次查询了。代码如下:

CREATETABLE临时表AS(SELECT字段1,字段2,COUNT(*)FROM表名GROUPBY字段1,字段2HAVINGCOUNT(*)>1);

上面这句话的功能是建立临时表,并将查询到的数据插入其中。有了上面的执行结果,下面就可以进行删除操作了:

DELETEFROM表名AWHERE(字段1,字段2)IN(SELECT字段1,字段2FROM临时表);

假如想保留重复数据中最新的一条记录,应该怎么做呢?可以利用ROWID,保留重复数据中ROWID最大的一条记录即可:

DELETEFROMTABLE_NAMEWHEREROWIDNOTIN(SELECTMAX(ROWID)FROMTABLE_NAMED

GROUPBYD.COL1,D.COL2);

重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。[考点]高级操作

17.

什么是分区表?正确答案:当表中的数据量不断增大时,查询数据的速度会变慢,应用程序的性能就会下降,这时应该考虑对表进行分区。对大表进行分区,将有益于大表操作的性能和大表数据的维护。官方文档说通常当表的大小超过2GB,或对于OLTP系统,当表的记录超过1000万时,都应考虑对表进行分区。当对表进行分区后,在逻辑上,表仍然是一张完整的表,只是将表中的数据在物理上可能存放到多个表空间或物理文件上。当查询数据时,不至于每次都扫描整张表。Oracle可以将大表或索引分成若干个更小、更方便管理的部分,每一部分称为一个分区,这样的表称为分区表。SQL语句使用分区表比全表能提供更好的数据处理与访问的性能。即使某些分区不可用,其他分区仍然可用,这称为分区独立性。

分区表的一些限制条件:①簇表不能进行分区;②不能分割含有LONG或LONGRAW列的表;③索引组织表不能进行范围分区。[考点]分区表

18.

分区表有什么优点?正确答案:分区表有如下的优点:

1)增强可用性。如果表的一个分区由于系统故障而不能使用,那么表的其余好的分区仍可以使用。

2)减少关闭时间。如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,可能比整个大表修复花的时间更少。

3)维护轻松。单独管理每个分区比管理单个大表要轻松得多。

4)均衡I/O。可以把表的不同分区分配到不同的磁盘来平衡I/O,改善性能。

5)改善性能。对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快。

6)分区对用户透明,最终用户感觉不到分区的存在。[考点]分区表

19.

分区表有哪几类?如何选择用哪种类型的分区表?正确答案:Oracle的分区可以分为范围分区(RANGEPARTITION)、哈希分区(HASHPARTITION)、列表分区(IISTPARTITION)、复合分区(组合分区)、INTERVAL分区(间隔分区)和系统分区。其中,INTERVAL分区和系统分区是Oracle11g的新特性,尤其INTERVAL分区在生产环境中还是比较实用的。对于海量数据的数据库设计,分区的设计非常重要。例如,对于一个大表,应该采用哪种类型的分区,对于以后数据库的性能和管理至关重要。其实,范围分区、哈希分区和列表分区这三种分区的特点都非常明显:

1)如果需要进行数据的过期化处理,那么范围分区基本上是唯一的选择。

2)如果需要数据的均匀分布,那么可以考虑使用哈希分区。

3)如果数据的值可以很好地对应于某个分区,那么就可以考虑使用列表分区。

在上面的原则基础上,再结合性能的影响因素,来最终确定使用哪种类型的分区。

如果选择的分区不能确保各分区内数据量的基本平均,那么这种分区方式有可能是不恰当的。比如对于RANGE分区,假设分了10个分区,而其中一个分区中的记录数占总记录数的90%,其他9个分区只占总记录数的10%,则这个分区方式就起不到数据平衡的作用。[考点]分区表

20.

如何判断一张表是否是分区表?正确答案:

如果这个视图里的PARTITIONED列的值为YES,那么说明该表就是分区表。[考点]分区表

21.

分区表在查询的时候如何避免全分区扫描?正确答案:Oracle的分区扫描方式可以分为单分区和多分区扫描。

1)如果要求单分区查询,那么需要加上PARTITION关键字。

2)如果要求不能全分区查询,那么在WHERE条件中应该加上分区键的过滤条件。如下,CREATED列是分区键:

[考点]分区表

22.

在查询分区表的时候需要注意哪些问题?正确答案:在使用分区表的时候需要注意以下几方面:

1)在查询分区表时尽量带上分区键过滤条件,否则可能引起全分区扫描。

2)在设计分区表时,避免数据都进入默认分区,从而导致出现默认分区超大或各个分区大小严重不均衡的情况,失去分区表的意义。

3)需要特别注意分区表性能比普通表性能差的情况。这种情况的本质原因是,虽然分区表的分区索引比全局索引要小很多,但是由于没有扫描指定的分区,而是扫描了很多个小的索引,这些小索引的高度累计起来一般都比全局索引要高。索引的范围检索性能是由索引的高度(BLEVEL)决定的,而不是由索引的大小决定。所以,性能差异很明显。[考点]分区表

23.

分区表常用数据字典视图有哪些?正确答案:Oracle分区表相关数据字典视图如下:

1)显示数据库所有分区表的信息:DBAPARTTABLES。

2)显示表分区信息,显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS。

3)显示子分区信息,显示数据库所有复合分区表的子分区信息:DBA_TAB_SUBPARTITIONS。

4)显示分区列,显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS。

5)显示子分区列,显示数据库所有分区表的子分区列信息:DBA_SUBPART_KE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论