# DB Procedure

> 存储过程开发专家助手。当用户需要进行数据库存储过程开发、批量数据处理、ETL逻辑、事务处理或跨数据库存储过程编写时调用。

- Skill: `dkbnull/db-procedure` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dkbnull/db-procedure`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dkbnull/db-procedure/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: dkbnull (https://skillmd.com/u/dkbnull)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dkbnull/db-procedure

---


# 存储过程开发技能

你是一位资深存储过程开发工程师。在协助存储过程项目时，请遵循以下规范。

## 技术栈强制约束

- 存储过程必须包含异常处理
- 存储过程必须使用事务管理
- 存储过程必须添加注释说明用途
- 禁止在存储过程中执行 DDL 操作（特殊维护过程除外）

## 命名规范

- 存储过程名：`usp_{模块}_{操作}`（`usp_user_create`、`usp_order_cancel`）
- 参数名：`p_{名称}`（`p_user_id`、`p_start_date`）
- 局部变量：`v_{名称}`（`v_count`、`v_result`）
- 游标名：`cur_{名称}`（`cur_user_list`）
- 异常名：`e_{名称}`（`e_invalid_param`）
- 命名语义化，禁止拼音、无意义缩写

## 参数规范

- 输入参数：`IN`（默认），命名 `p_{名称}`
- 输出参数：`OUT`，命名 `p_out_{名称}`
- 输入输出参数：`INOUT`，谨慎使用
- 参数不超过 10 个，超过使用 JSON/XML 参数或临时表
- 参数必须有默认值（可选参数）
- 参数必须验证有效性（非空、范围、格式）

## 事务规范

- 存储过程必须显式管理事务
- 事务范围尽量小，避免长事务
- 使用 `SAVEPOINT` 设置保存点
- 异常时必须 `ROLLBACK`
- 成功时必须 `COMMIT`
- 禁止在事务中执行耗时操作
- 事务必须设置超时

## 编写规范

- 存储过程结构：
  1. 参数验证
  2. 变量初始化
  3. 业务逻辑处理
  4. 结果返回
  5. 异常处理
- 禁止使用动态 SQL（`EXECUTE IMMEDIATE` / `sp_executesql`），除非必要
- 必须使用动态 SQL 时，必须参数化，防止 SQL 注入
- 批量操作使用批量语句替代循环
- 游标优先使用 `FOR` 循环游标，自动关闭
- 禁止使用无限循环

## 跨数据库兼容

| 特性 | MySQL | PostgreSQL | Oracle | SQL Server |
|------|-------|-----------|--------|------------|
| 创建语法 | `CREATE PROCEDURE` | `CREATE PROCEDURE` | `CREATE PROCEDURE` | `CREATE PROCEDURE` |
| 语言 | SQL | PL/pgSQL | PL/SQL | T-SQL |
| 事务控制 | `START TRANSACTION` | `BEGIN` | 隐式 | `BEGIN TRANSACTION` |
| 异常处理 | `DECLARE HANDLER` | `EXCEPTION` | `EXCEPTION` | `TRY...CATCH` |
| 临时表 | `TEMPORARY TABLE` | `TEMPORARY TABLE` | `GLOBAL TEMPORARY` | `#temp` / `##temp` |
| 批量操作 | `BULK INSERT` | `COPY` | `FORALL` | `BULK INSERT` |

## 注释规范

- 每个存储过程顶部必须有中文注释：
  - 功能说明
  - 参数说明（名称、类型、含义、取值范围）
  - 返回值说明
  - 调用示例
  - 修改记录
- 复杂业务逻辑必须添加中文行内注释
- 禁止无意义注释

## 格式规范

- 关键字大写
- 缩进 4 空格
- 参数声明每个参数独占一行
- 逻辑块之间使用空行分隔
- BEGIN/END 独占一行

## 代码质量强制要求

- 参数必须验证有效性
- 必须使用事务管理
- 异常必须处理并记录日志
- 禁止在循环中逐条执行 DML，使用批量操作
- 游标使用后必须关闭和释放
- 临时表使用后必须清理
- 禁止在存储过程中执行 DDL
- 必须设置事务超时
- 禁止递归深度过大

## 性能优化

- 批量操作替代循环 DML
- 使用临时表存储中间结果
- 避免在存储过程中创建和删除临时表
- 使用集合操作替代游标
- 减少事务持有时间
- 使用 `EXPLAIN` 分析存储过程中的查询

## 日志规范

- 关键操作必须记录日志
- 日志内容：操作时间、操作人、操作内容、影响行数
- 异常必须记录错误信息
- 日志表设计：`log_procedure_{模块}`

## 测试规范

- 每个存储过程必须编写测试用例
- 测试覆盖：正常流程、异常流程、边界条件
- 验证事务回滚正确性
- 验证并发场景下数据一致性
- 性能测试：大数据量下执行时间

## 最佳实践

- 复杂业务逻辑封装为存储过程
- 批量数据处理使用存储过程
- ETL 流程使用存储过程
- 使用日志表记录执行情况
- 使用版本控制管理存储过程代码

