跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

存储过程开发模板与异常处理规范

存储过程开发需遵循统一模板以确保可维护性与错误捕获能力。分享了一个标准的 Oracle PL/SQL 存储过程结构,包含输入输出参数定义、默认返回值初始化及全局异常处理机制。通过标准化返回码(如 0000 成功、9999 失败)和错误信息拼接,便于调用方快速定位问题。此外还展示了业务逻辑中的差异判断示例,涉及跨库更新操作。掌握此类基础模板能显著提升数据库代码质量与调试效率。

霸天发布于 2017/10/25更新于 2026/10/2487 浏览
存储过程开发模板与异常处理规范

存储过程开发模板与异常处理规范

在长期维护数据库应用的过程中,我发现统一的存储过程(Stored Procedure)开发模板能显著降低沟通成本并减少线上故障。一个健壮的模板应当包含明确的参数定义、标准化的返回值处理以及完善的异常捕获机制。

基础结构示例

下面是一个基于 Oracle PL/SQL 的通用模板结构。注意参数命名规范及异常块的写法:

CREATE OR REPLACE PROCEDURE UP_ACCOUNT_TICKET(
    P_ACCOUNTS_CODE IN VARCHAR2,
    P_ACCOUNTS_DATE IN VARCHAR2,
    R_RETURNMSG OUT VARCHAR2,
    R_RETURN OUT VARCHAR2
) AS
BEGIN
    -- 初始化返回值,确保即使发生异常也能有明确状态
    R_RETURNMSG := 'OK';
    R_RETURN := '0000';

    -- 业务逻辑区域
    -- ...

EXCEPTION
    WHEN OTHERS THEN
        -- 回滚事务,防止脏数据提交
        ROLLBACK;
        -- 记录详细错误信息,限制长度以防溢出
        R_RETURNMSG := R_RETURNMSG || ';' || SUBSTR(TO_CHAR(SQLCODE) || SQLERRM, 1, 400);
        R_RETURN := '9999';
END UP_ACCOUNT_TICKET;

这里有个细节要注意:EXCEPTION 块里的 ROLLBACK 必须放在 WHEN OTHERS 分支内,否则语法会报错。同时,错误信息通常会被截断到 400 字符,这是为了避免 VARCHAR2 溢出。

业务逻辑中的差异判断

在处理报表或对账类任务时,经常需要判断数据是否存在差异。以下是一个典型的判断片段,展示了如何结合游标计数进行更新操作:

IF v_count = 0 THEN
     TS_D_RPT_ACCOUNTS_RESULT a
     a.state   
     a.end_time  v_mdate  a.proc_type  ;
    
    vo_return : ;
    vo_message : ;

    vo_return : ;
    vo_message : ;
 IF;
UPDATE
@DL_UCR_RPT
SET
=
'1'
-- 0 未完成,1 完成
WHERE
=
AND
=
'01'
=
0
=
'无差异'
ELSE
=
999
=
'有差异!'
END

这段代码中使用了数据库链接(DB Link)@DL_UCR_RPT,在实际部署时需确保当前用户拥有访问该远程对象的权限。变量 v_mdate 需要在 DECLARE 部分提前赋值,避免运行时未定义错误。

总结

这套模板的核心在于'防御性编程'。无论业务逻辑多复杂,先保证流程的可控性和错误信息的可读性。对于跨库操作,务必确认网络连通性与权限配置。养成这种编码习惯,后续排查问题时会节省大量时间。

目录

  1. 存储过程开发模板与异常处理规范
  2. 基础结构示例
  3. 业务逻辑中的差异判断
  4. 总结

更多推荐文章

查看全部
  • 大模型量化方法选择与效果评估指南
  • GitHub Copilot 自动同步 Claude Code 本地技能与 Agent 配置
  • ClawdBot 效果展示:Whisper tiny 本地转写与 LibreTranslate 双引擎容灾
  • Linux 网络基础:协议、分层与传输流程详解
  • LeetCode 面试经典 150 题回顾
  • OpenAssistant LLaMA 30B SFT 6 部署指南:从 XOR 权重到可用模型
  • Ubuntu 24.04.3 LTS 配置 Git 并连接 GitHub
  • 前端 Base64 格式文件上传详解:原理、实现与最佳实践
  • 加密与编码算法详解:Java 与 JavaScript 实现
  • JVM 垃圾回收入门:对象死亡判断的底层逻辑
  • 基于 CLIProxyAPI 与 New API 的 AI 模型中转站部署指南
  • Kimi K2.5 与 OpenClaw 结合:低成本高可控 AI 智能体方案
  • 2024 全球人形机器人企业画像与能力评估
  • Spring AI MCP Server 集成指南与源码解析
  • Kafka 核心架构解析:Topic 与 Partition 映射逻辑详解
  • 基于 DeepFace 和 OpenCV 的情绪分析器实现
  • VLA 模型架构全解与核心公式详解
  • 检索增强生成 (RAG) 技术原理与 LangChain、LlamaIndex 实践
  • Linux 进程间通信进阶:管道与共享内存详解
  • Web 开发者构建 Skills 市场与共享经济实战指南

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online