欢迎来到天天文库
浏览记录
ID:37712270
大小:40.00 KB
页数:7页
时间:2019-05-29
《Oracle8 PL SQL编程风格与系统性能的提高》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle8PL/SQL编程风格与系统性能的提高杨延广 曹素丽 摘 要:介绍了Oracle8PL/SQL程序设计中,提高系统性能的编程风格的几种方法,和存储过程及触发器的使用、错误处理等。 关键词:Oracle;SQL;存储过程;触发器;错误处理 中图分类号:TP311.11 文献标识码:B文章编号:1001-9081(2000)02-0073-02 Oracle是C/S(Client/Server)结构的大型数据库,主要语言是4GLSQL语言,具有功能强大而简单易学的优点。C/S结构的工作过程是:当客户端(C端)输入并发送一条SQL语句后,便通过网络送到服务器端(S端),在那里
2、被分析执行然后再将结果通过网络返回到客户端,此时客户端可以再发下一条SQL语句。可见,客户端是一条语句一条语句的发送,服务器端是一条一条的分析执行,结果再一次次的返回。但是,这样单个的SQL语句引起了频繁的网络通信,大大降低了系统性能。PL/SQL是扩展SQL后的语言,PL/SQL块作为一个单位发送,使用了较少的网络通信,而且在运行中能根据条件,决定执行或重复执行什么语句,既保留了SQL的强大性,又弥补了不足。1 提高程序的运行速度1.1 使用存储过程 存储过程是Oracle数据库的一种对象,是一种带名的PL/SQL过程程序块,它在创建后,被数据库服务器进行语法和句法分析,以编译了的形式存
3、储在数据库中,可以被有权用户在任何需要的地方调用。当客户端应用程序调用时,只需发送一条调用命令,数据库服务器就会执行该过程。与一般的PL/SQL块主要的不同是:无需在网上传送大量的源程序代码,只传送一条调用命令,这就大大降低了网络通信的负担;而且只在刚创建时分析编译一次,每次调用直接执行编译了的代码,因此运行速度较快。 在实际开发时,对于具有共同特性的功能模块最好使用存储过程,调用时通过使用不同的实际参数值来实现某一具体的处理。如果能充分利用存储过程来完成应用系统的操作与处理,则可大大提高系统的运行性能。1.2 编写可重用共享池中已有语句的SQL语句 共享内存缓冲区和后台进程合称为一个O
4、racle实例。当启动一个Oracle实例时,会有许多的Oracle后台进程被启动,每个进程都负责运行数据库的不同方面的处理,各进程通过共享内存彼此之间进行通信,该块内存就是系统全局区SGA。SGA被分隔为不同的区域,其中一个称作共享池(SharedPool)的区域中包含了发送给数据库的SQL语句的正文和PL/SQL块,以及它们经过分析后的表示形式与执行方案,其中执行方案是数据库实际处理该语句的方法,例如,需要访问哪些表和索引、是否需要执行排序操作等等。 因为要执行一条SQL语句,数据库就必须确定其执行方案。当数据库从客户应用程序接收到一条SQL语句时,它首先检查是否该语句在共享池中。若在
5、,那么不重新对其分析而是重复使用已经在共享池中的形式及执行方案;若不在,则对该语句进行分析,得到新的分析形式与执行方案并进行存储,覆盖共享池中以前的内容。 由此可以看出,编写可重用共享池中语句的SQL语句就显得十分必要,因为避免不必要的重新分析,会很大程度上减小服务器所承担的工作量。要想重复使用共享池中的语句,就应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致。下面推荐一种有效实用的方法。1.2.1 SQL语句各部分的格式 一条语句可以一行也可以分多行书写,但最好换行书写,每一子句一行,且每行的第一个关键字与第一行的关键字的尾部对齐,这样做以确保每次使用同一条
6、语句时分行的位置一致,而不要让语句在第80列偶然溢出到下一行,例如下面的格式中字母T、M、E、D、P是对齐的,一子句占了一行: SELECTcol1,col2 FROMtable—name1 WHEREcol1>col2 ANDcol2>col3 GROUPBYcol1; 当刚执行过上述语句后,若又接收到下面的语句: SELECTcol1,col2 FROMtable—name2 WHEREcol1>col2 ANDcol2>col3 GROUPBYcol2; 则通过检查认为与共享池中的语句一致,可重复使用共享池中的执行方案,不必重新分析。 而下面的的语句被认为是不
7、同的,因为分行的位置不同,需要重新进行分析。 SELECTcol1,col2FROMtable—name2 WHEREcol1>col2 ANDcol2>col3 GROUPBYcol1;1.2.2 字母大小写采用一致约定 关键字、保留字大写,用户声明的标识符小写。请看下面的两条语句: SELECTxm FROMstudent; 与 selectxm FROMstudent; 比较的结果
此文档下载收益归作者所有