知识大全 Oracle8 PL/SQL编程风格与系统性能的提高

Posted 语句

篇首语:观书散遗帙,探古穷至妙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle8 PL/SQL编程风格与系统性能的提高相关的知识,希望对你有一定的参考价值。

Oracle8 PL/SQL编程风格与系统性能的提高  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle是C/S(Client/Server)结构的大型数据库 主要语言是 GLSQL语言 具有功能强大而简单易学的优点 C/S结构的工作过程是 当客户端(C端)输入并发送一条SQL语句后 便通过网络送到服务器端(S端) 在那里被分析执行然后再将结果通过网络返回到客户端 此时客户端可以再发下一条SQL语句 可见 客户端是一条语句一条语句的发送 服务器端是一条一条的分析执行 结果再一次次的返回 但是 这样单个的SQL语句引起了频繁的网络通信 大大降低了系统性能 PL/SQL是扩展SQL后的语言 PL/SQL块作为一个单位发送 使用了较少的网络通信 而且在运行中能根据条件 决定执行或重复执行什么语句 既保留了SQL的强大性 又弥补了不足       提高程序的运行速度      使用存储过程    存储过程是Oracle数据库的一种对象 是一种带名的PL/SQL过程程序块 它在创建后 被数据库服务器进行语法和句法分析 以编译了的形式存储在数据库中 可以被有权用户在任何需要的地方调用 当客户端应用程序调用时 只需发送一条调用命令 数据库服务器就会执行该过程 与一般的PL/SQL块主要的不同是 无需在网上传送大量的源程序代码 只传送一条调用命令 这就大大降低了网络通信的负担 而且只在刚创建时分析编译一次 每次调用直接执行编译了的代码 因此运行速度较快     在实际开发时 对于具有共同特性的功能模块最好使用存储过程 调用时通过使用不同的实际参数值来实现某一具体的处理 如果能充分利用存储过程来完成应用系统的操作与处理 则可大大提高系统的运行性能     编写可重用共享池中已有语句的SQL语句    共享内存缓冲区和后台进程合称为一个Oracle实例 当启动一个Oracle实例时 会有许多的Oracle后台进程被启动 每个进程都负责运行数据库的不同方面的处理 各进程通过共享内存彼此之间进行通信 该块内存就是系统全局区SGA SGA被分隔为不同的区域 其中一个称作共享池(Shared Pool)的区域中包含了发送给数据库的SQL语句的正文和PL/SQL块 以及它们经过分析后的表示形式与执行方案 其中执行方案是数据库实际处理该语句的方法 例如 需要访问哪些表和索引 是否需要执行排序操作等等     因为要执行一条SQL 语句 数据库就必须确定其执行方案 当数据库从客户应用程序接收到一条SQL语句时 它首先检查是否该语句在共享池中 若在 那么不重新对其分析而是重复使用已经在共享池中的形式及执行方案 若不在 则对该语句进行分析 得到新的分析形式与执行方案并进行存储 覆蓋共享池中以前的内容     由此可以看出 编写可重用共享池中语句的SQL语句就显得十分必要 因为避免不必要的重新分析 会很大程度上减小服务器所承担的工作量 要想重复使用共享池中的语句 就应该编写与其格式一致的语句 包括字母的大小写 标点符号 换行的位置等都要一致 下面推荐一种有效实用的方法     SQL语句各部分的格式    一条语句可以一行也可以分多行书写 但最好换行书写 每一子句一行 且每行的第一个关键字与第一行的关键字的尾部对齐 这样做以确保每次使用同一条语句时分行的位置一致 而不要让语句在第 列偶然溢出到下一行 例如下面的格式中字母T M E D P是对齐的 一子句占了一行     SELECT col col     FROM table—name     WHERE col > col     AND col > col     GROUP BY col ;    当刚执行过上述语句后 若又接收到下面的语句     SELECT col col     FROM table—name     WHERE col > col     AND col > col     GROUP BY col ;    则通过检查认为与共享池中的语句一致 可重复使用共享池中的执行方案 不必重新分析     而下面的的语句被认为是不同的 因为分行的位置不同 需要重新进行分析     SELECT col col FROM table—name     WHERE col > col     AND col > col     GROUP BY col ;    字母大小写采用一致约定    关键字 保留字大写 用户声明的标识符小写 请看下面的两条语句     SELECT xm    FROM student     与    select xm    FROM student     比较的结果是这两句不匹配或者说不等价 因为第一句中的SELECT是大写的 而第二句的是小写的     其它 如运算符两侧各留一个空格等    总之 设计自己的编写约定并遵守这些约定 使要处理的语句与共享池中的相一致 有助于运行性能的提高       提高可维护性      编写触发器    对表中数据进行修改 删除或插入是非常常见的操作 当表被修改时 应该自动给其他需要执行操作的程序发信号 触发器可以完成这一功能 在Oracle 中 触发器是一段程序 但是这段程序是当发生INSERT UPDATE或DELETE操作时被自动执行的 与过程的调用(是通过调用语句调用执行)不同 因此当某事件的发生引起连环更新或其他的相应操作时 通过自动执行触发器代码实现而不用人工干预 大大减轻了维护工作 同时也很好的保证了数据的一致性     触发器的优点是自动激发 不管什么引起数据修改(来自程序的或是来自用户的) 它们都工作 所以常常用于不同数据表中的相关数据的串接修改 采用这种方法实现数据表间接的数据关联可由数据库集中维护控制 规则变化时只需修改相应的触发器即可 这样系统易于维护 提高了工作效率     使用%TYPE %ROWTYPE方式声明变量    程序设计中常常要通过变量来实现程序间的数据传递 即将表中数据赋值给变量 或是把变量值插入到表中 而要完成这些操作的前提就是 表中数据与变量类型要一致 然而在实际中 表中数据或类型 或宽度有时要变化 一旦变化 就必须去修改程序中的变量声明部分 否则程序将不能正常运行 为了减少这部分程序的修改 编程时使用%TYPE %ROWTYPE方式声明变量 使变量声明的类型与表中的保持同步 随表的变化而变化 这样的程序在一定程度上具有更强的通用性       提高程序自检能力      一个好的应用系统不仅要有好的用户界面 齐全的功能处理模块 而且要有很强的错误处理能力 因此要求编程人员要预测可能的各种情况(声明异常情态并引发) 并尽可能从错误中恢复过来(编写相应异常情态处理器代码) 这就是Oracle 中的异常部分的程序设计内容 然而这部分的设计绝非易事 在异常部分的最后设置OTHERS异常情态处理器是个很好的编程习惯 因为它为运行时刻捕捉到的其它错误指明了处理去向 从而保证了程序的正常运行 格式如下     BEGIN    …    EXCEPTION     WHEN excep—name THEN     …     WHEN excep—name THEN     …     WHEN OTHERS THEN     …    END;    但是对程序中出现的错误要做到正确的处理(即正确选择异常处理器并执行它) 还必须弄清楚异常情态的传播问题     异常情态的传播指的是当在程序块的声明 执行 异常部分分别出现异常情态时 或在本块中没有相应的异常处理器时会将这个异常情态传播到哪里 会去激发那个块中的处理器 传播规则是这样的     当一个异常情态是在块的执行部分引发的(最常见的) PL/SQL使用下面的规则确定激活哪个异常处理器 ( )若当前块对该异常情态设置了处理器 则执行它并成功完成该块的执行 然后控制转给包含块 ( )若当前块没有该处理器 则通过在包含块中引发它来传播异常情态 然后对包含块执行步骤 另外 无论是在声明部分引发了一个异常情态 还是在异常处理部分引发 则该异常情态将立即传播给包含块 在包含块引用上述规则进行异常情态的处理 即使在当前块设置了OTHERS处理器也不会被执行       易于阅读       对于子程序 触发器 包等带名的程序块 使用结束标识 例如     CREATE OR REPLACE PROCEDURE addstud IS    …    BEGIN    …    END addstud;   /* 此处的过程名add是可选的 写上较好 与块开始的CREATE相对应 */     采用统一的标识符命名规则 对于诸如变量名 子程序名 触发器名等数据库对象命名时 应尽量能表示其功能用途或含义      对于过程性语句与程序块采用缩进书写风格 会使得程序结构清晰 层次分明 易阅读      采用统一的字母大小写 尽管PL/SQL程序中不区分大小写 但是采用统一的字母大小写(如前文叙述的大小写约定)将在很大程度上提高程序的可阅读性      加注释      一条语句分多行书写 不让其自动分行     这方面的内容大家都已很熟悉 不再详述了     总之 良好的程序设计风格 可以在多个方面提高系统的性能 提高开发效率 很值得我们在工作中给以重视 cha138/Article/program/Oracle/201311/17317

相关参考

知识大全 在PL/SQL中使用游标获取数据

Oracle数据库编程:在PL/SQL中使用游标获取数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 PL/SQL最差实践

PL/SQL最差实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  超长的PL/SQL代码  影

知识大全 PL/SQL程序结构(组图)

PL/SQL程序结构(组图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是PL/SQL程

知识大全 pl/sql查询字段为科学计数法

  从pl/sql查询字段类型为number并且长度大于位的内容显示为科学计数法的计数方法  pl/sql  从pl/sql查询字段类型为number并且长度大于位的内容显示为科学计数法的计数方法后经

知识大全 oracle附加的字符串

  现在你可以通过字符串建立索引提高性能  许多PL/SQL程序对数据进行操作通常是通过使用SQL在数据库中直接操作数据你经常还需要在PL/SQL程序本身内声明和管理数据这个程序数据可能由一些单独的值

知识大全 PL/SQL中用光标查询多条记录

PL/SQL中用光标查询多条记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL光标

知识大全 PL/SQL用光标查询多条记录

PL/SQL用光标查询多条记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL光标为

知识大全 全面探讨PL/SQL的复合数据类型

全面探讨PL/SQL的复合数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PL/SQL有

知识大全 PL/SQL命名作用域的窍门

PL/SQL命名作用域的窍门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多PL/SQL程序

知识大全 PL/SQL开发中动态SQL的使用方法

PL/SQL开发中动态SQL的使用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  内容摘要在