PLSQL编程规范.docx
- 文档编号:6424004
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:14
- 大小:23.77KB
PLSQL编程规范.docx
《PLSQL编程规范.docx》由会员分享,可在线阅读,更多相关《PLSQL编程规范.docx(14页珍藏版)》请在冰豆网上搜索。
PLSQL编程规范
XX金融信息技术有限公司
PL/SQL编程规范
V1.0
2011-08-4
XX金融信息技术有限公司版权所有
文档标识
项目名称
ComStar
文档名称
PL/SQL编程规范
文档源
规范
版本号
1.0
状况
定为基线的
此版本文档的正式核准
姓名
签字
日期
分发控制
副本
接受人
机构
文档修订历史
版本
日期
描述
文档所有者
V1.0
2011/8/4
创建
王彦超
目录
1.文件组织1
2.文件结构2
2.1.文件的声明2
2.2.包头(packageheader)3
2.3.包体(packagebody)4
3.PL/SQL语言规范4
3.1.变量规范4
3.2.包规范4
3.3.游标规范5
3.4.事务处理规范5
3.5.数据封装规范5
3.6.数据访问规范5
3.7.日志书写规范6
3.8.错误处理规范6
3.9.书写规范7
3.10.书写优化性能建议7
3.11.其他经验性规则8
4.增量脚本维护规范9
4.1.增量脚本回归规范9
4.2.增量脚本文件命名规范9
4.3.增量脚本内部处理规范9
1.文件组织
系统大类
系统子类
模块编号(是具体情况决定是否保留)
包名称
市场信息终端
系统功能
203010
pkd_base_data
债券定价分析
203020
pkd_wh
计算器
图形
外币市场
现券
利率市场
基准利率
资金业务管理
系统功能
204010
pkt_member
债券定价分析
204020
pkt_client
计算器
图形
投组与交易数据维护
信用风险额度控管
自定义数据维护
损益与风险分析
理财产品管理
系统功能
201010
pkc_clear
债券定价分析
计算器
图形
理财产品与交易维护
自定义数据维护
损益与风险分析
接口系统
…
501010
pki_pub
公共模块
(所有schema共用)
209010
pk_pub
公共常量包
所有schema共用
无
pk_cn
PACKAGE脚本的文件名以pk_开头,扩展名为sql,每个包的包头和包体分开在不同文件中,包头文件名为(包名称)+”_hdr.sql”,包体文件名为(包名称)+”_bdy.sql”,一个文件中只能有一个包。
每个pkg里面的sp的功能点需参见客户需求
测试脚本文件以功能点编号+后缀(ini)命名
2.文件结构
2.1.文件的声明
文件的声明描述了文件和文件踪迹变化,位于文件的开头(参见示例1-1),主要内容有:
(1)英文名称
本存储过程(函数)的英文名
(2)模块名称
本存储过程(函数)的中文名称
(3)模块功能
本存储过程(函数)实现的功能简单描述
(4)创建日期
在此栏目中描述此模块作者,创建日期,版本号等信息
(5)修改历史
记录变更人,变更时间,变更内容
(6)备注
记录需要特殊描述或者提醒其他人注意的内容
英文名称:
sp_add_trader
模块名称:
新增**
模块编号:
0204010520
模块功能:
增加**的基本信息
创建日期:
王彦超2011-8-4版本号:
1.0
修改历史:
备注:
单记录返回,内部调用
示例2-1版权和版本的声明
2.2.包头(packageheader)
包头声明了包中的各个部件(过程和函数)。
注意事项:
一、过程名、函数名要用小写字母,过程名以pr_开头,函数名以fn_开头。
二、每个部件(过程或函数)要有说明,包括:
模块名称、模块编号、模块功能、修改历史。
模块编号为包的模块编号加上四个的序号。
三、过程或函数先定义输入参数,再定义输出参数。
每个参数后面都要用注释加以说明。
四、包头前面应包含一个功能点,存储过程名,功能简单描述的列表
五、凡是和数据表相关的变量,定义统一使用tablename%type的方式,提高兼容性
六、凡是会被前台调用的存储过程,以下5个参数是缺一不可的
i_operatorINVARCHAR2,--操作员代码
i_addressINVARCHAR2,--操作员地址
i_func_noINNUMBER,--功能点
o_errcodeOUTNUMBER,--错误代码
o_errmsgOUTVARCHAR2--错误信息
--交易数据管理子系统会员管理程序包头
--0204010510:
sp_query_trader_m查询席位信息
--0204010520:
sp_add_trader新增席位
--0204010530:
sp_mod_trader修改席位信息
--0204010540:
sp_logout_trader注销席位
CREATEORREPLACEPACKAGEpkt_member
AS
---------------------------------------------------------------------------------------------------
--英文名称:
sp_add_trader
--模块名称:
新增席位
--模块编号:
0204010520
--模块功能:
增加席位的基本信息
--创建日期:
王彦超2005/07/01版本号:
0.1.0
--修改历史:
--备注:
单记录返回,内部调用
----------------------------------------------------------------
PROCEDUREsp_add_trader(
i_operatorINVARCHAR2,--操作员代码
i_addressINVARCHAR2,--操作员地址
i_func_noINNUMBER,--功能点
i_trader_noINtt_trader.trader_no%TYPE,--席位号
i_member_idINtt_trader.member_id%TYPE,--会员号
……
o_errcodeOUTNUMBER,--错误代码
o_errmsgOUTVARCHAR2--´错误信息
);
ENDpkt_member;
示例2-1包头的声明
2.3.包体(packagebody)
包体声明了包中的各个部件(过程和函数)。
注意事项:
一、每个部件(过程或函数)要有的说明与包头的规范相同。
二、过程或函数的参数说明与包头的规范相同。
3.PL/SQL语言规范
语言规范主要包括变量规范、包规范、游标规范、事务处理规范等等
3.1.变量规范
1.变量名全部采用小写,局部变量名使用“v_”开头,输入参数以“i_开
头,输出参数以“o_”开头,输入输出参数用io_开头。
所有输入参数必
须显示声明
2.游标的命名
游标统一用后缀“_cur”命名
3.使用命名的常量以避免硬编码
使用常量包,常量统一用cn_的前缀命名
4.当变量代表列时,使用%TYPE属性
当变量实际上表示数据库表的某列数据时,为避免数据库结构修改
对变量的影响,应统一使用%TYPE属性对变量命名
5.使用%TYPE以标准化非数据库变量的声明
3.2.包规范
1.按照本文档的第一章的文件组织划分包内容
2.包内的存储过程及函数的命名必须遵循《数据字段规范.DOC》中的简写规范,常用的操作简称如下:
增加add修改upd删除del
查询qry检查chk
3.3.游标规范
1.外部查询的多行数据返回使用游标进行处理,通过传递游标变量的形式返回数据到外部接口,由外部程序自行FETCH数据。
2.打开游标前,必须显式检查游标的%ISOPEN属性。
3.使用FETCH语句后,要立即检查%NOTFOUND属性,以便正常终止游标FETCH循环。
4.无论PL/SQL程序是正常终止还是出错退出,都要关闭所有已打开的游标。
在出错退出时,应该在其异常处理部分管理所有游标,这可以释放一部分的系统资源
5.尽可能使用显示游标,避免使用隐式游标。
3.4.事务处理规范
1.在需要分割事务以使主事务的提交或者回滚独立于子事务的提交及回滚时,应使用自治事务
2.所有的存储过程均统一在结束处统一COMMIT或者ROLLBACK
3.5.数据封装规范
1.按照业务逻辑实现功能模块的封装,将业务规则逻辑集中在更少量的、良好设计的、易于维护的函数或者过程中,不必在每条SQL语句或者每天PL/SQL程序中重复这些逻辑
2.基于单一数据表的增、删、改、查采用标准SP进行封装,不允许相同逻辑的处理出现在多个SP中
3.6.数据访问规范
1.后台数据按照逻辑划分成多个SCHEMA,不同SCHEMA的数据不可互相访问
2.需要相互访问的表均存放在公共(INTERFACE)的SCHEMA中,通过访问INTERFACE中的接口表实现跨SCHEMA的数据访问
3.根据系统实际情况而定
3.7.日志书写规范
1.采用公共的API包完成后台日志数据记录。
(API完成输出错误信息提示、记录错误信息内容到数据库表、系统级的错误代码及错误信息等)
2.后台日志的信息记录级别包括DEBUG、INFO、WARN、ERROR、FATAL,其定义以及不同级别日志的采集标准如下:
●DEBUG-调试信息,供开发人员调试使用,由开发人员自行确定。
●INFO-提示信息,记录重要的系统事件或者业务事件,如开始结算等。
●WARN-警告信息,可能导致严重错误的警告信息
●ERROR-错误信息,导致系统运行错误的信息。
●FATAL-致命信息,导致系统无法继续运行的致命错误信息。
3.所有表操作的错误处理部分均应记录日志信息
3.8.错误处理规范
1.凡是涉及到表操作(insert,update,select,delete)的sql语句,都必须进行错误捕捉,不能将错误带到后面的语句
2.从表中select数据的语句,应严格区分NO_DATA_FOUND和TOO_MANY_ROWS的错误,并将相应错误信息填入错误信息
NO_DATA_FOUND多数为查询条件问题导致无数据返回(用户
级错误)
TOO_MANY_ROWS应该是数据表内数据异常导致(系统级错误)
3.所有存储过程(函数)的统一出口一律在存储过程的结束部分,不允许中间返回
4.在每一个异常处理部分,都要定义WHENOTHER子程序,以便捕获所有没有显示处理或其他类型的异常
5.所有程序中捕获到的错误,均转换成对应的errcode,errmsg,通过输出参数返回给调用者,所有存储过程(函数)结束前应统一捕获系统异常
6.在每个存储过程(函数)的入口处统一先将返回错误代码(errCode)设置为-999,功能处理成功结束后再将错误代码(errCode)设置为0(成功),避免程序过程中因错误未能正确捕获,导致功能未能完成,而程序却成功返回的情况出现
7.所有的模块都有错误编码区间,原则上错误编码全局唯一
8.错误信息描述应准确,业务相关的错误应将输入数据拼接到错误信息中。
如席位号【2013】不存在,会员【0012】密码错误等等,详细规则参见《错误代码提示规范》
9.错误代码根据存储过程(函数)的功能号来确定,具体规则为
错误代码=功能号后7位+XX,(XX为00-99)
即分配给每个功能点的错误代码为100个,由开发者自己划分错误代码,自行描述错误信息,不做具体规定
3.9.书写规范
1.PL/SQL语句的所有表名、字段名遵照数据字典的定义,系统保留字、内置函数名、PL/SQL保留字、关键字大写,用户声明的标识符小写。
2.对于子程序、触发器、包等带名的程序块,使用结束标识。
3.变量名小写,局部变量名使用“v_”开头,输入参数以“i_”开头,输出参数以“o_”开头,输入输出参数用io_开头。
所有输入参数必须显示声明。
4.连接符OR、IN、AND、以及=、<=、>=等前后加上一个空格。
5.对较为复杂的SQL语句加上注释,说明算法、功能。
注释风格:
注释单独成行、放在语句前面。
●应对不易理解的分支条件表达式加注释;
●对重要的计算应说明其功能;
●过长的函数实现,应将其语句按实现的功能分段加以概括性说明;
●常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围
●可采用单行/多行注释。
(--或/**/方式)
6.SQL语句的缩进风格
∙一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进
∙WHERE子句书写时,每个条件占一行,语句另起一行时,以保留字或者连接符
开始,连接符右对齐。
例如:
Wheref1=1
Andf2=2
Orf3=3
∙INSERT语句,必须书写字段,字段可5个或6个一组。
中间用TAB分开
7.多表连接时,使用表的别名来引用列。
8.供别的文件或函数调用的函数,绝不应使用全局变量交换数据;
9.TAB统一定义为4个空格,建议使用Ultraedit作为SQL书写工具
3.10.书写优化性能建议
1.避免嵌套连接。
例如:
A=BANDB=CANDC=D
2.WHERE条件中尽量减少使用常量比较,改用主机变量
3.系统可能选择基于规则的优化器,所以将结果集返回数据量小的
表作为驱动表(FROM后边最后一个表)。
4.大量的排序操作影响系统性能,所以尽量减少ORDERBY和GROUP
BY排序操作。
如必须使用排序操作,请遵循如下规则
●排序尽量建立在有索引的列上。
●如结果集不需唯一,使用UNIONALL代替UNION。
5.索引的使用
●尽量避免对索引列进行计算。
●尽量注意比较值与索引列数据类型的一致性。
●对于复合索引,SQL语句必须使用主索引列
●索引中,尽量避免使用NULL。
●对于索引的比较,尽量避免使用!
=查询列和排序列与索引列次序保持一致
6.尽量避免相同语句由于书写格式的不同,而导致多次语法分析。
7.尽量使用共享的SQL语句。
8.查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面。
9.任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
10.IN、OR子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。
3.11.其他经验性规则
1.尽量少用嵌套查询。
如必须,请用notexist代替notin子句。
错误
SELECT......
FROMemp
WHEREdept_noNOTIN(SELECTdept_no
FROMdept
WHEREdept_cat='A');
正确
SELECT......
FROMempe
WHERENOTEXISTS(SELECT'X'
FROMdept
WHEREdept_no=e.dept_no
ANDdept_cat='A');
2.用多表连接代替EXISTS子句。
错误
SELECT......
FROMemp
WHEREEXISTS(SELECT'X'
FROMdept
WHEREdept_no=e.dept_no
ANDdept_cat='A');
正确
SELECT......
FROMempe,deptd
WHEREe.dept_no=d.dept_no
ANDdept_cat='A';
3.少用DISTINCT,用EXISTS代替如例(4)
错误
SELECTDISTINCTd.dept_code,d.dept_name
FROMdeptd,empe
WHEREe.dept_code=d.dept_code;
正确
SELECTdept_code,dept_name
FROMdeptd
WHEREEXISTS(SELECT'X'
FROMempe
WHEREe.dept_code=d.dept_code);
4.使用UNIONALL、MINUS、INTERSECT提高性能
5.使用ROWID提高检索速度。
对SELECT得到的单行记录,需进行DELETE、UPDATE操作时,使用ROWID将会使效率大大提高。
6.使用优化线索机制进行访问路径控制。
7.使用cursor时,显示光标优于隐式光标
4.增量脚本维护规范
维护规范包含增量脚本文件命名规范、脚本内部处理规范、增量脚本回归规范。
4.1.增量脚本回归规范
1.每次新版本发布的同时,做增量脚本回归。
2.默认回归文件为table.sql。
3.将增量脚本采用增量的方式,回归在文件的尾部。
4.回归时,需要在脚本中增加注释。
其格式为:
--张三yyyymmddversion:
##########,增量脚本_**
4.2.增量脚本文件命名规范
1.命名规范
系统名_增量脚本_序号_版本号.SQL
例如:
ComStar1.0.4_增量脚本_41_P11.SQL
4.3.增量脚本内部处理规范
1.新建物理表
增加表前,先检查该表是否已经存在。
如果存在,则直接跳过;如果不存在,增加表。
2.修改物理表属性
修改表属性前,先检查该表是否已经存在。
如果存在,则修改表属性;如果不存在,则报固定格式的错误信息。
成功信息格式:
错误格式:
altertableerror:
username.tablename
例如:
altertableerror:
clear.tc_clear_account
3.物理表增加字段
增加表字段前,先检查该字段是否已经存在。
如果存在,则直接跳过;如果不存在,增加字段。
成功时报修改成功信息
错误信息格式:
altertableerror:
addfield“fieldname”inusername.tablename
4.修改物理表字段属性
修改表字段属性前,先检查该字段是否已经存在。
如果存在,则修改字段属性;如果不存在,则报固定格式的错误信息。
错误格式:
alterfielderror:
username.tablename.fieldname
例如:
alterfielderror:
clear.tc_clear_account.clear_account_no
5.新建、修改视图
使用createorreplaceview模式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PLSQL 编程 规范
![提示](https://static.bdocx.com/images/bang_tan.gif)