存储过程开发规范
存储过程开发规范
一、总体原则
-
清晰分工:业务复杂时,采用“主存储过程 + 子存储过程”的模式拆解流程。
-
职责单一:每个存储过程只处理一类业务职责,避免多种职责混杂。
-
易于测试与调试:每个存储过程应具备可测试性和可追踪性,避免隐式逻辑。
-
性能优先:注意索引命中、批量处理、事务控制,减少资源占用。
-
安全规范:避免SQL注入、避免动态SQL拼接(除非必要),遵守权限最小化原则。
二、主/子存储过程设计规范
1. 命名规范
-
主存储过程:
sp_<模块名>_<功能名>_main
-
子存储过程:
sp_<模块名>_<功能名>_sub_<子功能名>
-
示例:
sp_order_create_main
,sp_order_create_sub_discount
2. 主存储过程职责
-
控制业务流程主线
-
调用多个子存储过程完成各子任务
-
处理事务边界(启动/提交/回滚)
-
统一输出结果、错误信息、日志等
3. 子存储过程职责
-
处理特定功能(如价格计算、库存扣减等)
-
不得包含SELECT输出或RETURN结果集
-
使用
OUT
参数或中间表传递结果 -
不允许打印日志或暴露中间状态
三、输入输出规范
1. 输入参数
-
明确业务参数,定义清晰
-
参数名统一小写、蛇形命名(如:
user_id
,order_code
)
2. 输出规范
-
主存储过程通过
OUT
参数或返回表结构统一输出 -
所有错误通过约定格式的错误码 + 错误消息输出(建议建立统一错误码系统)
四、事务控制规范
-
仅主存储过程可控制事务(
BEGIN TRANSACTION / COMMIT / ROLLBACK
) -
子存储过程必须透明执行,不得启动或提交事务
-
异常通过
RETURN
+OUT
参数返回给主过程决定是否回滚
五、日志与审计规范
-
日志记录必须集中在主过程完成
-
子过程不允许写日志(防止碎片化记录和事务污染)
-
建议设计专门日志表,记录调用参数、结果、耗时、调用链信息
六、异常处理规范
-
子过程出现异常应设法捕获并通过参数反馈
-
主过程统一处理异常、决定回滚
-
所有异常必须落日志,便于排查
七、代码规范建议
-
不允许使用
SELECT *
,应显式列出字段 -
多行 SQL 使用缩进和注释规范块
-
所有表字段必须有注释,方便理解和维护
-
禁止直接使用临时表名,应加前缀区分来源(如
tmp_
,bak_
)
八、版本管理建议
-
所有存储过程应存于代码仓库(如Git),版本统一管理
-
每次修改必须有变更记录,说明用途、时间、开发者