




已阅读5页,还剩147页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
讲课题目Oracle精简教程,部门:FBD3姓名:,讲师个人介绍,课程目标,议程,1两大开发阵营及Oracle技术和认证考试简介2Oracle10g体系结构(基础版)3OracleSQL编码规范4SQL调优基础(基于索引)5Oracle常用函数/*6Linux上的oracle安装*/,一、两大开发阵营及Oracle认证考试简介1.1两大开发阵营简述,1.2各主流数据库市场份额Oracle:53%DB2:17%MicrosoftSQLServer:13%MySql,Sybase,informax:27%,1.3Oracle认证考试简介:Oracle9i认证课程:Oracle9I007(IntroductiontoOracle9iSQL)Oracle9I031(Oracle9iDBAFundamentals1)Oracle9I032(Oracle9iDBAFundamentals2)Oracle9I033(Oracle9iDBAPerformanceTunning)Oracle10g认证课程:Oracle10g(047):IntroductiontoSQLOracle10g(042):Oracle10gDBAAdministrator1Oracle10g(043):Oracle10gDBAAdministrator2,OracleDBA认证考试级别有3种:OracleCertifiedAssociate(OCA):Oracle认证技术员9i(007,031),10g(047,042)OracleCertifiedProfessional(OCP):Oracle认证专业人员9iOCA+(032,033),10gOCA+(043)+一门原厂培训OracleCertifiedMaster(OCM):Oracle认证专家OCP+二门高级原厂培训+二天OCM实践考试通过,OCM考试内容:1.Creaetdatabasebymanual2.BackupandRecoveryRman,Flashback3.DatawareHouse(patition,paraller,sqlloader,MaterializedView,bitmap)4.PerformaceMangement5.RealApplicationClusters(RAC)6.DataGuard7.EnterpriseManagerGridControl,二、Oracle10g体系结构,数据库(database):物理操作系统文件或磁盘(disk)的集合。实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这两个词有时可互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:,。实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以操作数据库;而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行操作。不过,Oracle的真正应用集群(RealApplicationClusters,RAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的多台计算机上操作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理磁盘上)。由此,我们可以同时从多台不同的计算机访问这个数据库。OracleRAC能支持高度可用的系统,可用于构建可扩缩性极好的解决方案。,实例是一组后台进程和共享内存。数据库是磁盘上存储的数据集合。实例“一生”只能装载并打开一个数据库。数据库可以由一个或多个实例(使用RAC)装载和打开。前面提到过,大多数情况下,实例和数据库之间存在一种一对一的关系。如果有人谈到实例,他指的就是Oracle的进程和内存。提到数据库时,则是说保存数据的物理文件。可以从多个实例访问一个数据库,但是一个实例一次只能访问一个数据库。,1.数据文件:用来记录用户数据的文件,也是消耗存储最大的部分。一个数据文件只能属于一个数据库,并且一个数据文件只能属于一个表空间,一个或者多个数据文件构成一个逻辑存储结构。2.控制文件:用来管理数据库的状态,是数据库中最重要的辅助文件。每个数据库至少有一个控制文件。一般记录着数据库的名称,数据库的物理布局:包括数据文件的位置、联机日志文件的位置、备份文件,以及数据库当前的SCN等重要信息。3.日志文件:就像一笔“流水账”,它是按照时间顺序记录数据库内发生的所有改变,这些“流水账”对于数据恢复非常重要。包括联机日志文件和归档日志文件,前者是所有数据库都必须的,后者是“归档模式”的数据库才会产生。,4.联机日志(组):是以组为单位进行管理的,每一个组就叫做一个联机日志组。每个联机日志组可以包含多个成员,同一组里的每个成员的内容是相同的,其实就是多个成员互为镜像。每个数据库必须要有两个联机日志组,联机日志是以一种循环的方式写入的。5.归档日志:Oracle根据是否启用了“归档”而把数据库分成两种模式:归档模式和非归档模式。所谓“归档”就是一组联机日志文件被写满后,在触发日志切换的同时,还要触发ARCn进程的工作,这个进程的工作就是把之前写满的联机日志做一份拷贝保存到另外一个位置,这份拷贝就叫做“归档日志”。,6.日志线程:一个数据库实例使用的联机日志就叫做一个日志线程。Oracle实例和数据库之间可以有两种对应关系,如果“实例:数据库=1:1”,这种环境就是所谓的“单实例”。如果“实例:数据库=n:1(n=2)”,这种就是所谓的RAC。即便是在RAC环境下,对每个日志线程的要求也是一样的。即每个实例或每个线程至少两个“联机日志组”,每个联机日志组又至少要有一个“日志成员”。7.参数文件(spfile和pfile):spfile是二进制文件,不能手工编辑。pfile是文本文件,可以手工编辑。用来存放数据库初始参数配置,比如SGA的大小,控制文件的位置等,每个数据库启动时都要读取两个文件中的一个,根据内容对实例进行初始化。,8.Alert日志文件:每一个数据库都需要一个Alert日志文件,位于参数文件BACKGROUP_DUMP_DEST指定的目录下,文件名的格式为alert_dbname.log。Oracle使用这个文件来记录数据库运行过程中发生的重大事件,比如启动、关闭、日志切换。,三、OracleSQL编码规范1注释1.1注释方式可采用单行/多行注释-或/*/方式,对较为复杂的SQL语句加上注释;对主要的实现算法加注释,说明算法功能;应对不易理解的分支条件表达式加注释;1.2注释风格注释单独成行放在SQL语句前面。2命名和格式约定所有表名、字段名遵照数据字典的定义,系统保留字、内置函数名、PL/SQL保留字大写。,2.1变量名小写;普通变量名使用“v_”开头;游标标变量以“cur_”开头;输入参数以“i_”开头;输出参数以“o_”开头;输入输出参数以“io_”2.2PL/SQL中的子程序命名,使用小写;函数以“fn_”开始;过程以“sp_“开始;触发器以“tr_badmltype_”;-b:beforea:afterdmltype:insert,update,delete类型声明以“tp_”开始;包以“pkg_”开始;,3缩进与断行风格3.1、低级别语句在高级别语句后的,缩进一个制表符3.2、同一语句不同部分的缩进,如果为substatement,则为2个空格,如果与上一句某部分有密切联系的,则缩至与其对齐3.3、一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进。3.4、WHERE子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。,例如:语句另起一行时以保留字开始(如and)左对齐可以和where对齐。wheref1=1andf2=2orf3=33.5连接符OR、IN、AND、以及、=等前后加上一个空格。3.6INSERT语句,尽量书写字段,字段可5个或6个一组。例如:,INSERTINTOT_MemberCapital(memberID,accountType,available,lastBalance,lastOccupied,todayBalance,todayOccupied,profit,todayIn,todayOut,payment,received,miscFee,frozen,basefund)SELECTmemberID,accountType,available,todayBalance,todayOccupied,0,0,0,0,0,0,0,0,paltFrozen+Frozen,basefundFROMT_HisMemberCapitalWHEREeffectDate=i_lastday;4编写规范4.1、SQL语句中除字符串中必须大写的内容外,全部小写,包括关键字,因为大小写结合,需要输入大写字母速度慢。(相同的SQL语句是在SQL缓冲区中读取,SQL分析器不用对SQL语句重新分析产生执行计划,系统响应时间大大减少)。4.2一行不要超过80个字符,在1024*768分辨率下只能显示这么110字符。4.3多表连接时要使用表的别名来引用,并把别名前缀于每个Column上.4.4不要用SELECT*,当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用*是一个方便的方法。不幸的是,这是一个非常低效的方法.实际上,ORACLE在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。,4.5不要依赖任何隐式的数据类型转换。例如,不能为数字变量赋予字符值,而假定SQL会进行必要的转换。相反,在为变量赋值或比较值之前,应使用适当的CONVERT函数使数据类型相匹配。隐式转换可能带来的问题:性能和版本升级的问题.隐式转换的例子:declarecchar(1);beginc:=24;-隐式转换c:=23;-没有隐式转换end;,4.6不要将空的变量值直接与比较运算符(符号)比较。如果变量可能为空,应使用ISNULL或ISNOTNULL进行比较,或者使用ISNULL函数。4.7当删除全表记录时,用TRUNCATE替代DELETE,在通常情况下,回滚段(rollbacksegments)用来存放可以被恢复的信息,但占用大量的系统资源。而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短。4.8避免在索引列上使用计算,避免改变索引列的类型,WHERE子句中,如果索引列是函数的一部分优化器将不使用索引而使用全表扫描。4.9严格使用ORDERBY,ORDERBY子句只在两种严格的条件下使用索引,ORDERBY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.ORDERBY中所有的列必须定义为非空。,4.10总是使用索引的第一个列,如果索引是建立在多个列上,只有在它的第一个列(leadingcolumn)被where子句引用时,优化器才会选择使用该索引。4.11如系统不需要唯一的记录,用UNION-ALL替换UNION,当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并,然后在输出最终结果前进行排序.。如果用UNIONALL替代UNION,这样排序就不是必要了,效率就会因此得到提高。用如下的SELECT.FORUPDATE语句获得:SELECT,.FROMWHEREFORUPDATEOF,.NOWAIT,5、INDEX使用5.1将索引所在表空间和数据所在表空间分别设于不同的磁盘上,有助于提高索引查询的效率。5.2对于多字段索引,只有当查询条件中存在从前往后的部分字段时,才可能使用该索引。例如:有索引:(A,B,C),只有当查询条件包含A,或者A,B,或者A,B,C时,方可能使用该索引,只包含B或者C或者B,C的查询字句,均不能使用该索引。因此,创建多字段索引时,一定要特别注意索引字段的次序。5.3Oracle默认使用的基于代价的SQL优化器(CBO)非常依赖于统计信息,一旦统计信息不正常,会导致数据库查询时不使用索引或使用错误的索引。一般来说,Oracle的自动任务里面会包含更新统计信息的语句,但如果表数据,发生了比较大的变化(超过30%),可以考虑立即手动更新统计信息例如:analyzetableabccomputestatistics,但注意,更新统计信息比较耗费系统资源,建议在系统空闲时执行。5.4Oracle在进行一次查询时,一般对一个表只会使用一个索引,因此,有时候过多的索引可能导致Oracle使用错误的索引,降低查询效率。例如某表有索引1(Policyno)和索引2(classcode),如果查询条件为policyno=xxandclasscode=xx,则系统有可能会使用索引2,相较于使用索引1,查询效率明显降低。5.5大表(10万条以上记录)关联的关联字段,一定要建索引,否则可能导致查询效率大幅下降。5.6“”和”!=”操作符不会使用索引,可以用“”来替代。5.7当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用。,5.8尽量避免在sql语句的查询条件的表字段上用Function进行处理,尤其是一些关键的数据过滤条件,这样会导致该字段的索引无法使用,实在无法避免的,可以考虑建立function的索引,但是这样的索引其他sql语句一般无法使用,利用效率比较低,尽量不要采取这种处理办法。6、SQL优化6.1、Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOTEXISTS比NOTIN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。eg:,Select*fromdeptwheredeptnoin(selectdistinctdeptnofromemp);=Select*fromdeptwhereexists(select1fromempwhereemp.deptno=dept.deptno);6.2对于一些大表,特别是大表关联的操作,书写SQL语句一定要特别注意,建议先使用Toad,PL/SQLdeveloper等工具先查看sql语句执行计划,优化后再写进代码6.3建议在小表时就设计成用索引扫描。读数据有全表扫描方式和索引方式。全表扫描就是顺序地访问表中每条记录.ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描,索引方式通过ROWID访问表。你可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息。,6.4不必要的排序操作当在SQLSTATEMENT中包含下面的语句中,会引起系统进行排序操作。排序是非常昂贵的操作,如果能够避免就避免了吧。ORACLEClause内部操作ORDERBYSORTORDERDISTINCT,MINUS,INTERSECT,SORTAGGREGATEUNION或者其他需要唯一值的情况MIN,MAX,COUNT,SUMSORTAGGREGATEGROUPBYSORTGROUPBY,四、SQL调优基础(基于索引的)1.常用索引的几大类型:1.1B*树索引:我们所说的“传统”索引,这是Oracle和大多数其他数据库的最常用的索引。B*数的构造类似与二叉树,能根据键提供一行或一个行集的快速访问。1.2函数索引:将一个函数计算得到的结果存储在行的列中,而不是存储数据本身。可以把基于函数的索引看作一个虚拟列上的索引。可以加快形如SELECT*FROMTWHENFUNCTION(TABLE_COLUMN)=SAME_VALUE,这样的查询,因为值FUNCTION(TABLE_COLUMN)已经提前计算并存储在索引中。1.3位图索引:适用于高度重复而且通常只读的数据。(高度重负是指相对于表中的总行数,数据只有很少的几个不同值)。1.4反向键索引:利用反向键索引,如果索引中填充的是递增的值,索引条目在索引中可以得到更均匀的分布。1.5分区索引:用于支持数据仓库中分区表的索引。2.基于索引的SQL语句优化方法2.1前言客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧,下降,小型机idle所剩无几,应用服务器断连、超时,严重影响业的正常运行。数据库的优化方法有很多种,在应用层说一般是基于索引的优化。如何判断哪些索引是必要的,哪些又是不必要的。判断的最终标准是看这些索引是否对我们的数据库性能有所帮助。具体到方法上,就必须熟悉数据库应用程序中的所有SQL语句,从中统计出常用的可能对性能有影响的部分SQL,分析、归纳出作为Where条件子句的字段及其组合方式;在这一基础上可以初步判断出哪些表的哪些字段应该建立索引。其次,必须熟悉应用程序。必须了解哪些表是数据操作频繁的表;哪些表经常与其他表进行连接;哪些表中的数据量可能很大;对于数据量大的表,其中各个字段的数据分布情况如何;等等。对于满足以上条件的这些表,必须重点关注,因为在这些表上的索引,将对SQL语句的性能产生举足轻重的影响。,2.2建立索引常用的规则如下:1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;A、正确选择复合索引中的主列字段,一般是选择性较好的字段;,B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;8、频繁进行数据操作的表,不要建立太多的索引;9、删除无用的索引,避免对执行计划造成负面影响;以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。,2.3应用实例:1.避免对列的操作任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢:select*fromrecordwheresubstrb(CardNo,1,4)=5378(13秒)select*fromrecordwhereamount/301000(11秒)select*fromrecordwhereto_char(ActionTime,yyyymmdd)=19991201(10秒),由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此将SQL重写如下:select*fromrecordwhereCardNolike5378%(1秒)select*fromrecordwhereamount1000*30(10。3.增加查询的范围限制以下查询表record中时间ActionTime小于2001年3月1日的数据:select*fromrecordwhereActionTimeto_date(20010101,yyyymm)后一种SQL语句将利用上ActionTime字段上的索引,从而提高查询效率。把20010301换成一个变量,根据取值的机率,可以有一半以上的机会提高效率。同理,对于大于某个值的查询,如果知道当前可能的最大值,也可以在Where子句中加上“AND列名SELECTceil(15),ceil(15.1),ceil(-15.1)FROMdual;ceil(15)ceil(15.1)ceil(-15.1)-1516-152.ABS(n):该函数用于返回数字n的绝对值,SQLDECLARE2v_absNUMBER(6,2);3BEGIN4v_abs:=abs(7/输入no的值:-12.3绝对值:12.3,3.EXP(n):该函数用于返回e的n次幂(e=2.71828183.)eg:SQLDECLARE2v_expNUMBER(6,2);3BEGIN4v_exp:=exp(4);5dbms_output.put_line(e的4次幂:|v_exp);6END;7/e的4次幂:54.64.FLOOR(n):该函数用于返回小于等于数字n的最大整数SQLSELECTfloor(15),floor(15.1)FROMdual;,FLOOR(15)FLOOR(15.1)-15155.POWER(m,n):该函数用于返回数字m的n次幂,底数m和指数n可以是任意数字。但如果数字m为负数,则数字n必须是正数。SQLSELECTpower(-2,3),power(2,-1)FROMdual;POWER(-2,3)POWER(2,-1)-80.5,6.SORT(n):用于返回数字的平方根,而且数字n必须大于等于0eg:SQLDECLARE2v_sqrtNUMNBER(6,2);3BEGIN4v_sqrt:=sqrt(10);5dbms_output.put_line(10的平方根:|v_sqrt);6END;7/10的平方根:3.167.LN(n):该函数用于返回数字n的自然对数,其中数字n必须大于0,SQLDECLARE2v_lnNUMBER(6,2);3BEGIN4v_ln:=ln(4);5dbms_output.put_line(4的自然对数:|v_ln);6END;7/4的自然对数:1.398.LOG(m,n):该函数用于返回以数字m为底的数字n的对数,数字m可以是除0和1以外的任何正整数,数字n可以是任何正整数。SQLSELECTlog(2,8),log(10,100)FROMdual;,LOG(2,8)LOG(10,100)-339、TRUNC(n,m):该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是正数,则将数字n截取至小数点后的第m位;如果数字m是负数,则将数字n截取至小数点的前m位。SQLSELECTtrunc(45.926),trunc(45.926,1),trunc(45.926,-1)2FROMdual;TRUNC(45.936)TRUNC(45.926,1)TRUNC(45.926,-1)-4545.940,10、MOD(m,n):该函数用于取得两个相除后的余数。如果数字n为0,则返回结果为m.示例如下:SQLDECALRE2v_modNUMBER(6,2);3BEGIN4v_mod:=mod(10,3);5dbms_output.put_line(10除3的余数:|v_mod);6END;7/11、ROUND(n,m):该函数用于执行四舍五入运算:如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是正数,则四舍五入至小数点后m位。,示例如下:SQLDECLARE2v_roundNUMBER(6,2);3BEGIN4v_round:=round(6END;7/,5.2字符函数1、INITCAP(char):该函数用于将字符串中每个单词的首字符大写,其他字符小写,单词之间用空格和非字母字符分割。SQLDECLARE2v_initcapVARCHAR2(10);3BEGIN4v_initcap:=initcap(myword);5dbms_output.put_line(首字符大写:|v_initcap);6END;7/首字符大写:MyWord,2.ASCII(char):该函数用于返回字符串首字符的ASCII码值,示例如下:SQLSELECTascii(a)a,ascii(A)AFROMdual;aA-97653.CHR(n):该函数用于将ASCII码值转变为字符.SQLDECLARE2v_chrVARCHAR2(10);3BEGIN4v_chr:=chr(56);5dbms_output.put_line(ASCII码为56的字符:|v_chr);6END;7/,4.CONCAT:该函数用于连接字符串,其作用与连接操作符|完全相同。SQLselectconcat(GOOD,Morning)FROMdual;5.INSTR(char1,char2,n,m):该函数用于取得字串在字符串中的位置,其中数字n为起始搜索位置,数字m为子串出现次数。如果数字n为负数,则从尾数开始搜索;数字m必须为正整数,而且n和m的默认值为1.SQLSELECTinstr(morning,n)FROMdual;INSTR(MORNING,N)-4,6.LENGTH(char):该函数用于返回字符串的长度。如果字符串的类型为CHAR,则其长度包括所有的后缀空格:如果char是null,则返回null.SQLDECLARE2v_lenINT;3BEGIN4v_len:=length(myword);5dbms_output.put_line(字符串长度:|v_len);6END;7/字符串长度:7,7.LOWER(char):该函数用于将字符串转换为小写格式。SQLSELECTlower(SQLintroduction)FROMdual;8.LPAD(char1,n,char2):该函数用于在字符串char1的左端填充字符串char2,直至字符串总长度为n,char2的默认值为空格。如果char1长度大于n,则该函数返回char1左端的n个字符.示例如下:SQLDECLARE2v_lpadVARCHAR2(10);3BEGIN4v_lpad:=lpad(aaaa,10,*);5dbms_output.put_line(在字符串左端添加字符*:|v_lpad);6END;7/,9.LTRIM(char1,set):该函数用于去掉字符串char1左端所包含的set中的任何字符。Oracle从左端第一个字符开始扫描,逐一去掉在set中出现的字符,当遇到不是set中的字符时终止,然后返回剩余结果SQLSELECTltrim(morning,m)FROMdual;LTRIM(-orning10.NLS_INITCAP(char,nls_param):该函数用于将字符char的首字符大写,其他字符小写,其中char用于NCHAR或NVCHAR2类型字符串,其前面加上n,用单引号括起来,nls_param的格式为nls_sort=sort,用于指定特定语言特征,SQLDECLARE2v_nls_initcapNCHAR(10);3BEGIN4v_nls_initcap:=nls_initcap(nmyword);5dbms_output.put_line(首字符大写:|v_nls_initcap);6END;7/11.NLS_SORT(char,nls_param):该函数用于将字符串转变为小写,其中nls_param的格式为nls_sort=sort,用于指定特定语言特征.SQLSELECT*FROMtestORDERBYNLSSORT(name,NLS_SORT=XDanish);,12.REPLACE(char,search_string,replacement_string):该函数用于将字符串的子串替换为其他子串。如果replacement_string为null,则会去掉指定子串;如果search_string为null,则返回原有字符串.示例如下:SQLSELECTreplace(缺省值为10,缺省,默认)FROMdual13.RPAD(char1,n,char2):该函数用于在字符串char1的右端填充字符串char2,直至字符串的总长度为n,char2的默认值为空格。如果char1长度大于n,则该函数返回char1左端的n个字符。示例如下:,SQLDECLARE2v_rpadVARCHAR2(10);3BEGIN4v_rpad:=rpad(aaaa,10,*);5dbms_output.put_line(在右端添加字符:|v_rpad);6END;7/14.RTRIM(char,set):该函数用于去掉字符串char右端所包含的、set中的任何字符。Oracle从右端第一个字符开始扫描,逐一去掉在set中出现的字符,当遇到不是set中的字符时终止,然后返回剩余结果。示例如下:SQLSELECTrtrim(morning,ing)FROMdual;,15.SOUNDEX(char):该函数用于返回字符串的语音表示,使用该函数可以比较发音相同的字符串SQLSELECTsoundex(ship),soundex(sheep)FROMdual;SOUNSOUN-S100S10016.SUBSTR(char,m,n):该函数用于取得字符串的子串,其中数字m是字符开始位置,数字n是子串的长度。如果m为0,则从首字符开始;如果m是负数,则从尾部开始。示例如下:,SQLDECLARE2v_subsVARCHAR2(10);3BEGIN4v_subs:=substr(morning,1,3);5dbms_output.put_line(字符串的子串:|v_subs);6END;7/17.TRIM(charFROMstring):该函数用于从字符串的头部、尾部或两端截取特定字符,参数char为要截去的字符,string是源字符,SQLDECLARE2v_sourceVARCHAR2(20):=ABCDGHJHAB;3v_trimVARCHAR2(20);4BEGIN5v_trim:=trim(AFROMv_source);6dbms_output.put_line(v_trim);7END;8/18.UPPER(char):该函数用于将字符串转换为大写格式。示例如下:SQLSELECTupper(sql)FROMdual;,5.3日期时间函数:1.ADD_MONTHS(d,n):该函数用于返回特定日期时间d之后(或之前)的n个月所对应的日期时间(n为正整数表示之后:n为负整数表示之前)。示例如下:SQLDECLARE2v_dateDATE;3BEGIN4v_date:=add_months(sysdate,-14);5dbms_output.put_line(当前日期前14个月对应的日期:|v_date);6END;7/,2.CURRENT_DATE:该函数用于返回当前会话时区所对应的日期时间。SQLALTERSESSIONSETTIME_ZONE=-5:0;SQLALTERSESSIONSETnls_date_format=YYYY-MM-DDHH24:MI:SS;SQLSELECTcurrent_dateFROMdual;3.CURRENT_TIMESTAMP:该函数用于返回当前会话时区的日期时间SQLSELECTcurrent_timestampFROMdual;,4.DBTIMEZONE.用于返回数据库锁住的时区:SQLDECLARE2V_ZONEvarchar2(10)3begin4.v_zone:=dbtimezone;5.dbms_output.put_line(当前数据库时区:|v_zone);6END;7/5.EXTRACT:该函数是用于从日期时间值中取出所需要的特定数据(例如取得年份,月份等)SQLSELECTextract(YEARFROMsysdate)yearFROMdual;,6.FROM_TZ:该函数用于将特定时区的TIMESTAMP值转变为TIMESTAMPWITHTIMEZONE值SQLDECLARE2v_tzvVARCHAR2(100);3BEGIN4v_tzv:=from_tz(TIMESTAMP2003-03-2808:00:00,3:00);5dbms_output.put_line(v_tzv)6END;7/,7.LOCALTIMESTAMP:用于返回当前会话时区的日期时间SQLDECLARE2v_tsVARCAHR2(100);3BEGIN4v_ts:=localtimestamp;5dbms_output.put_line(当前日期时间:|v_ts);6END;7/当前如期时间:27-12月-0308.25.08.607000下午8.MONTHS_BETWEEN(d1,d2):该函数用于返回日期d1和d2之间相差的月数.,如果d1小于d2,则返回负数。如果日期d1和d2的天数相同或都是月底,则返回整数;否则oracle以每月31天为准来计算结果的小数部分。SQLSELECTmonths_between(sysdate,31-8月-1998)fromdual9.NEW_TIME(date,zone1,zone2):该函数用于返回时区一的日期所对应的时区二的日期时间.示例如下:,SQLDECLARE2v_timeDATE;3BEGIN4dbms_session.set_nls(nls_date_format,YYYY-MM-DDHH24:MI:SS);5v_time:=new_time(to_date(2003-11-1012:10:00,YYYY-MM-DDHH24:MI:SS),BST,EST);6dbms_output.put_line(当前日期间:|v_time);7END;8/当前日期时间:2003-11-1018:10:00,10.NEW_DAY(d,char):该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。SQLSELECTnext_day(sysdate,星期一)FROMdual;11.NUMTODSINTERNAL(n,char_expr):该函数用于将数字n转换为INTERVALDAYTOSECOND格式,其中char_expr可以是DAY,HOUR,MINUTE或SECOND。SQLDECLARE2v_dateVARCHAR2(100);3BEGIN4v_date:=numtodsinterval(10000,MINUTE);5dbms_output.put_line(10000分钟对应的时间:|v_date);6END;7/,12.ROUND(d,fmt):该函数用于返回日期时间的四舍五入结果,如果fmt指定年度,则7月1日为分界线;如果fmt指定月,则16日为分界线;如果指定天,则中午12:00为分界线。SQLDECALRE2v_dateDATE;3BEGIN4v_date:=ROUND(sysdate,MONTH);5dbms_output.put_line(sysdate|四舍五入结果:|v_date);6END;7/13.SESSIONTIMEZONE:用于返回当前会话所在时区SQLSELECTsessiontimezoneFROMdual;,14.SYS_EXTRACT_UTC(datetime_with_timezone):该函数用于返回特定时区时间所对应的格林威治时间。SQLDECALRE2v_timestampTIMESTAMP;3BEGIN4v_timestamp:=SYS_EXTRACT_UTC(systemstamp);5dbms_output.put_line(格林威治时间:|v_timestamp);6END;7/格林威治时间:27-12月-0311.43.54.205000下午15.SYSDATE:该函数用于返回当前系统的日期时间SQLSELECTsysdateFROMdual;,16.SYSTIMESTAMP:该函数用于返回当前系统的日期时间及时区SQLDECLARE2v_timestampVARCHAR2(100);3BEGIN4v_timestamp:=SYSTIMESTAMP;5dbms_output.put_line(当前系统时间及时区:|v_timestamp);6END;7/17.TO_TIMESTAMP(charfmt,nls_param):该函数是用于将符合特定日期和时间格式的字符串转变为TIMESTAMP类型,SQLDECLARE2v_timestampTIMESTAMP;3BEGIN4v_timestamp:=TO_TIMESTAMP(01-1月-03);5dbms_output.put_line(日期时间值:|v_timestamp);6END;7/18.TO_TIMESTAMP_TZ(charfmt,nls_param):该函数用于将符合特定日期和时间格式的字符串转变为TIMESTAMPWITHTIMEZONE类型SQLSELECTto_timestamp_tz(2003-01-01,YYYY-MM-DD)FROMdual;,19.TRUNC(d,fmt):该函数用于截断日期时间数据。如果fmt指定年度,则结果为本年度的1月1日:如果fmt指定月,则结果为本月1日。SQLSELECTtrunc(sysdate,MONTH)FR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学教师教学绩效考核标准
- 塑料成型车间安全隐患排查清单
- 2025湖南衡阳市耒阳市市属事业单位第二批急需紧缺专业技术人才引进27人笔试备考题库及答案解析
- 城市给排水管网运行管理手册
- 2026华能江苏公司电力交易运营中心招聘笔试参考题库附答案解析
- 森林防火知识教学方案
- 新版语文教材阅读教学参考教案
- 制造业设备维修计划与执行细则
- 高二生物遗传学重点题型训练
- 2026华能陕西发电有限公司校园招聘笔试备考题库及答案解析
- 机关健康知识讲座
- 独角抱杆立杆施工方案
- 利用AI技术提升初中语文写作教学效果的实践课题申报书
- 2025年教育督导责任督学培训心得体会与收获
- 《FABE销售法则》课件
- 卫星网络管理与运维-深度研究
- 高纯石英砂提纯研究以及项目可行性分析报告
- 2025年临床医师定期考核必考复习题库及答案(1060题)
- 小学生防校园欺凌课件
- 《SPC基本知识培训》课件
- 工程居间合同范本电子版可打印
评论
0/150
提交评论