oracle技能3oracle开发企业信息化管理解决方案提供商_第1页
oracle技能3oracle开发企业信息化管理解决方案提供商_第2页
oracle技能3oracle开发企业信息化管理解决方案提供商_第3页
oracle技能3oracle开发企业信息化管理解决方案提供商_第4页
oracle技能3oracle开发企业信息化管理解决方案提供商_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、Oracle编程规范朱海龙 目 录123编程规范4标准化编程(以EBS为例)56注释规范格式规范总结变量规范1. 变量规范变量规范局部变量:l_全局变量:g_常量:c_Type类型: _typeRecord类型:_recTable类型: _tbl游标:cur_输入参数p_输出参数x_包名:_pkg变量规范参数默认值使用 DEFAULT常量默认值使用 :=索引:表名_N1 唯一索引: 表名_U12. 注释规范包头包体注释/*=+| Copyright (c) 1995-2002 Oracle Corporation | Redwood Shores, CA, USA | All rights r

2、eserved. |+=+| PACKAGE NAME | xla_messages_pkg | | DESCRIPTION | XLA Messages Package | | HISTORY | 07-Dec-95 P. Labrevois Created | 07-Feb-01 Adapted for XLA | |+=*/过程或者函数尽可能的注释,如有必要说明每个参数的意思/*=+| | Public Function | | invalid_hdr_analytical | | Returns true if sources for the reference set are inv

3、alid | |+=*/删除原有程序代码:整个过程或者函数使用/*/注释/*FUNCTION get_messageRETURN VARCHAR2ISBEGIN-Bug : 12369074-Removed IF condition,so it returns 2000 characters for all releases. RETURN SUBSTR(fnd_message.get,1,2000);END get_message;*/其他尽量使用单行注释 - - If the calling responsibility is a GL responsibility then the tr

4、ansaction - security for the application is enabled only if the profile option - XLA_USE_TRANSACTION_SECURITY is set to Yes. If this value is No, - the standard XLA security group is enabled for that session. - But if the calling responsibility belongs to any other application, - transaction securit

5、y is enabled for the application (passed in as the - parameter). -修改或者添加已经有的代码因改加上对应的注释和描述-Add 2014.xx.xx by xx , comment.-Add 2014.xx.xx by xx -Begin ment-Add 2014.xx.xx by xx -End3. 格式规范格式规范其使用PLSQL Develop美化器关键字大写,其余可小写缩进2每个参数为一行,逗号设置为前面参数显示加上对应的IN和OUT类型调用过程或者函数时候,尽量显示调用参数END时候必须加上对应的过程、函数或者包名PLS

6、QL美化器4. 编程规范包尽可能的把相同的功能封装到一个包里注意公有和私有的访问权限私有变量和过程写在前面变量/参数如果针对某个表的字段,声明时请使用%TYPE或则%ROWTYPE类型函数一般由少量的代码组成与过程都有返回值得功能:区别在于表达不同,函数不能独立存在,只能作为执行语句的一部分;过程的返回值需要定义变量接收函数一般不做含有DML语句逻辑过程被调用的过程一般要有个输出参数作为成功失败的判断标识。异常每个函数或者过程都应考虑异常情况。对于SELECT INTO的时候要考虑NO_DATA_FOUND异常业务逻辑中的错误应该作为一种异常抛出并且捕获处理,处理方式有两种:1.停止运行或向外

7、抛出.2.继续运行。请不要轻易捕捉未知异常。INSERT和UPDATE如果未有成功记录数应抛出NO_DATA_FOUND异常事务控制谨慎使用COMMIT和Rollback,如果乱使用会导致事务的一致性被破坏。被调用过程一般不写COMMIT。COMMIT并不非常重要,ORACLE的SESSION结束后自然会提交COMMIT;DML语句INSERT语句写出插入的每个字段SELECT语句禁止使用*创建对象每个表创建都应该具有主键建表应该创建历史记录字段(如CREATED_BY、CREATION_DATE、LAST_UPDATED_BY、LAST_UPDATE_DATE)建表时候应该建立扩展字段如(A

8、TTRIBUTE1、 ATTRIBUTE2.)外键约束一般不创建,使用代码控制多创建基于表的视图。1是主外键更好的表达。2是可封装多语言或者做权限控制(EBS)建立同义词(Oracle EBS里客制化的表都应该建立apps的同义词)5. 标准化编程常用的几种EBS标准包FND_API异常G_EXC_ERROR -已知错误G_EXC_UNEXPECTED_ERROR -未知错误常量G_RET_STS_SUCCESS -SG_RET_STS_ERROR-EG_RET_STS_UNEXP_ERROR -UG_TRUE -TG_FALSE -F函数TO_BOOLEANFND_MESSAGE过程SET_

9、NAME -设置错误信息SET_TOKEN -替换定义的占位符APP_EXCEPTION过程RAISE_EXCEPTION -抛出APPLICATION_EXCEPTION异常异常APPLICATION_EXCEPTION -自定义异常RECORD_LOCK_EXCEPTION -抛出-0054锁异常FND_MSG_PUB过程INITIALIZE -初始化消息COUNT_MSG -总共消息数ADD 向消息队列添加消息DELETE_MSG -删除消息ADD_EXC_MSG -向消息队列添加异常消息举例1 PROCEDURE Divide_Test ( p_Divide_Number IN NUM

10、BER ,x_Return_Status OUT VARCHAR2 ) IS BEGIN x_Return_Status := Fnd_Api.g_Ret_Sts_Success; IF MOD(p_Divide_Number, 2) = 0 THEN NULL; -Do nothing ELSE RAISE Fnd_Api.g_Exc_Error; END IF; EXCEPTION WHEN Fnd_Api.g_Exc_Error THEN x_Return_Status := Fnd_Api.g_Ret_Sts_Error; END Divide_Test;举例2 PROCEDURE G

11、et_Emp_Id ( p_Emp_Num IN VARCHAR2 ,p_Emp_Id OUT NOCOPY NUMBER ) IS BEGIN SELECT Emp.Employee_Id INTO p_Emp_Id FROM Hr_Employees Emp WHERE Emp.Last_Name = p_Emp_Num; EXCEPTION WHEN No_Data_Found THEN Fnd_Message.Set_Name(TEST, EMPLOYEE_TEST); Fnd_Message.Set_Token(MESSAGE, The Employee num not exist!

12、); App_Exception.Raise_Exception; END Get_Emp_Id;举例3 TYPE Error_Type IS TABLE OF VARCHAR2(2000) INDEX BY PLS_INTEGER; PROCEDURE Validate_Item_Code ( p_Item_Code IN VARCHAR2 ,x_Return_Status OUT VARCHAR2 ,x_Error_Tbl OUT Error_Type ) IS BEGIN x_Return_Status := Fnd_Api.g_Ret_Sts_Success; Fnd_Msg_Pub.

13、Initialize; -验证物料是否为空 IF p_Item_Code IS NULL THEN Fnd_Message.Set_Name(TEST, ITEM_CODE_TEST); Fnd_Message.Set_Token(MESSAGE, The item should not be null!); Fnd_Msg_Pub.Add; END IF; 举例3 -验证物料开始字母是否为T IF Substr(p_Item_Code, 1, 1) = T OR p_Item_Code IS NULL THEN Fnd_Message.Set_Name(TEST, ITEM_CODE_TES

14、T); Fnd_Message.Set_Token(MESSAGE, The item should begin with T! ); Fnd_Msg_Pub.Add; END IF; -验证物料长度是否等于8 IF Length(p_Item_Code) 7 OR p_Item_Code IS NULL THEN Fnd_Message.Set_Name(TEST, ITEM_CODE_TEST); Fnd_Message.Set_Token(MESSAGE, The length must be equal to 7! ); Fnd_Msg_Pub.Add; END IF; -如果有错误,

15、抛出异常 IF Fnd_Msg_Pub.Count_Msg 0 THEN RAISE Fnd_Api.g_Exc_Error; END IF; EXCEPTION举例3WHEN Fnd_Api.g_Exc_Error THEN x_Return_Status := Fnd_Api.g_Ret_Sts_Error; -赋值错误信息给输出数组 FOR i IN 1 . Fnd_Msg_Pub.Count_Msg LOOP x_Error_Tbl(i) := Fnd_Msg_Pub.Get(i, F); END LOOP; WHEN OTHERS THEN x_Return_Status := Fnd_Api.g_Ret_Sts_Unexp_Error;

温馨提示

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

评论

0/150

提交评论