¥
立即购买

存储过程功能分析专家

6 浏览
1 试用
0 购买
Dec 3, 2025更新

本提示词专为数据库管理场景设计,能够深入分析存储过程的功能目的、执行逻辑和业务价值。通过系统化的分析框架,帮助数据库管理员快速理解复杂存储过程的核心功能,识别潜在的性能问题和优化机会,提升数据库维护效率。该提示词采用技术文档写作风格,确保输出内容结构清晰、表述准确、逻辑严密,适用于数据库开发、系统维护和知识传承等多种业务场景。

包含2个提示词变量:
变量 描述 示例
存储过程代码 需要分析的存储过程完整代码 CREATE PROCEDURE GetCustomerOrders @CustomerID INT AS BEGIN SELECT * FROM Orders WHERE CustomerID = @CustomerID END
输出语言 输出内容的语言选择 中文
查看全部

存储过程功能概述

dbo.usp_ReconcileDailyOrders 用于按指定业务日期,对订单数据按客户进行每日汇总与对账。它从订单表筛选当日数据(可选按客户清单过滤),计算每位客户的订单数、已支付金额与未支付金额,并以“存在则更新,不存在则插入”的方式写入对账结果表,同时记录一次审计日志。该过程支持重复执行以纠偏当日对账数据,提升账务数据的一致性与可追溯性。

主要功能特性

  • 数据操作类型:

    • 查询与数据落地:将当日订单筛选后落地到临时表
    • 过滤:可按传入的客户列表限定对账范围
    • 聚合计算:统计每客户的订单数、已支付总额、未支付总额
    • 合并写入:MERGE 到每日对账结果表(更新或插入)
    • 审计记录:向审计表写入一次操作记录
    • 事务控制:整个过程在一个显式事务内完成
  • 业务逻辑描述:

    1. 从 dbo.Orders 读取 UpdatedAt 日期等于 @asOfDate 的订单,保存到临时表 #orders(使用索引提示 IX_Orders_Date)。
    2. 若传入 @customerIds 非空,则删除 #orders 中不在该客户列表内的记录,实现对账客户范围的限定;若列表为空,则对全部当日订单对账。
    3. 基于 #orders 按 CustomerId 聚合,得到:
      • OrderCount:订单数
      • PaidAmount:Status='PAID' 的 TotalAmount 之和
      • UnpaidAmount:Status<>'PAID' 的 TotalAmount 之和 将上述聚合结果与 dbo.DailyOrderReconciliation 按 (SettleDate=@asOfDate, CustomerId) 进行 MERGE:
      • 已存在则更新 OrderCount/PaidAmount/UnpaidAmount/UpdatedAt
      • 不存在则插入新记录,CreatedAt/UpdatedAt 使用 SYSUTCDATETIME()
    4. 向 dbo.ReconcileAudit 写入审计记录,包含结算日期、受影响行数(上一条 MERGE 的影响行数)、备注与创建时间(UTC)。
    5. 提交事务。
  • 输入输出参数:

    • 输入
      • @asOfDate (date):对账业务日期。用于筛选 Orders 中 UpdatedAt 转为 date 后等于该日期的记录。
      • @customerIds (dbo.IntList READONLY):可选的客户 ID 列表(单列 Id int)。非空时仅对这些客户进行对账;为空时对全部客户对账。
    • 输出
      • 无显式输出参数或结果集。过程的外部可观测结果为:
        • 更新/插入 dbo.DailyOrderReconciliation
        • 插入一条 dbo.ReconcileAudit 审计记录

技术实现分析

  • 执行流程:

    1. SET NOCOUNT ON;开启显式事务
    2. 创建临时表 #orders,并将 Orders 中 UpdatedAt 属于 @asOfDate 的数据写入
    3. 若 @customerIds 非空,删除 #orders 中不在客户清单内的记录
    4. 基于 #orders 聚合生成按客户的订单数与金额汇总(区分 PAID 与非 PAID)
    5. 使用 MERGE 将聚合结果与每日对账表对齐(匹配即更新,不匹配即插入)
    6. 写入审计记录(AffectedRows 使用上一条 MERGE 的 @@ROWCOUNT)
    7. 提交事务
  • 关键技术点:

    • 临时表分阶段处理:先落地当日订单,再按客户列表过滤并执行聚合,有利于将复杂逻辑分步清晰化。
    • CTE 聚合:使用 CTE 计算每客户的订单数量与按状态拆分的金额汇总。
    • MERGE 上下游对齐:基于 (SettleDate, CustomerId) 实现对账结果的幂等式“更新/插入”写入。
    • 审计可追踪:记录受影响行数与 UTC 时间,便于运维审计与问题回溯。
    • 事务包裹:读取、计算、写入与审计在同一事务内,确保对账结果与审计日志的一致性。
    • 索引提示与日期筛选:对 Orders 使用索引提示 IX_Orders_Date;通过 CAST(UpdatedAt AS date) 实现按“自然日”的筛选。
    • 表值参数:@customerIds 作为 READONLY 表值参数参与过滤,支持按客户范围的增量对账。
  • 性能考虑:

    • 日期筛选方式:对 UpdatedAt 做 CAST 后再比较日期,可能影响索引高效使用,依赖底层索引设计与优化器选择;实际效率取决于数据分布与索引结构。
    • 临时表未建索引:#orders 随当日数据量增长,后续删除与分组聚合均可能触发全表扫描,数据量大时资源消耗增大。
    • 索引提示的稳定性:强制使用 IX_Orders_Date 能提升可控性,但当索引失效或统计信息、数据分布变化时,可能导致计划不佳或执行失败。
    • MERGE 的并发与锁:MERGE 对目标表的更新/插入在单语句中完成,结合事务会持有相应锁;在高并发或大数据量场景下需关注锁竞争与阻塞。
    • 表值参数基数:表值参数缺乏统计信息,优化器对其行数的估计可能不准确;当客户列表很大或很小,与数据量的相对关系会影响计划选择与执行效率。
    • 审计受影响行数:@@ROWCOUNT 反映 MERGE 实际“更新+插入”的行数,便于衡量本次对账覆盖的客户数量,但并不直接等价于订单行数。

使用场景说明

  • 适用业务场景:

    • 每日订单对账/结算汇总,按客户维度形成当日对账快照
    • 需要对某一日的对账结果进行重算或局部(指定客户)重算
    • 审计合规场景中记录每次对账执行的范围与数量
  • 调用时机:

    • 每日批处理任务(如日终对账)
    • 数据修复或重跑(指定历史 @asOfDate)
    • 局部重算(传入 @customerIds 实现按客户的增量对账)
  • 预期效果:

    • dbo.DailyOrderReconciliation 中按 (@asOfDate, CustomerId) 形成/更新一条对账结果
    • 已支付与未支付金额被准确拆分,订单计数更新
    • dbo.ReconcileAudit 记录本次对账影响的客户条目数量与执行时间(UTC)

注意事项

  • 使用约束:

    • 业务日期口径:订单筛选基于 UpdatedAt 的日期部分(而非创建时间),需确认与业务“按日对账”的口径一致。
    • 客户清单的空值:若 @customerIds 列表中包含 NULL,使用 NOT IN 的过滤语义可能导致过滤结果与预期不一致,应确保清单中均为有效整数 ID。
    • 目标表唯一性:MERGE 匹配键为 (SettleDate, CustomerId),为保证数据一致性,应确保目标表在该组合键上具备唯一性约束或等效约束条件。
    • 索引依赖:Orders 查询使用了索引提示 IX_Orders_Date,若索引不存在或更名,会导致执行失败;需保持索引与提示一致。
    • 事务与错误处理:过程内使用显式事务但未包含显式异常处理;执行期间如发生错误,需由调用方或外层机制妥善处理中断与回滚,避免长事务悬挂。
    • 时间记录口径:对账结果与审计中的时间字段使用 SYSUTCDATETIME(),属于 UTC 时间,需与系统时间口径保持一致。
  • 维护要点:

    • 运行基线监控:关注不同日期订单量对临时表规模、聚合与 MERGE 的执行时长与资源占用。
    • 状态口径一致性:已支付的识别基于 Status='PAID' 的精确匹配,非 PAID 状态均归为未支付金额;需与订单状态字典保持一致。
    • 受影响行数解读:审计表的 AffectedRows 代表本次 MERGE 更新或插入的客户条目数,用于衡量本次对账覆盖范围。
    • 并发与调度:在高并发场景应避免同一日期的重复并发执行,防止目标表上的锁竞争;将过程纳入合适的批处理窗口更稳妥。
    • 数据口径复核:定期核验 UpdatedAt 的数据质量与索引健康度,确保日期筛选与性能表现稳定。

Procedure Function Overview

This procedure archives audit log rows from a “hot” table to a history table in small batches over a specified time window. It performs an atomic “move” per batch (delete from the source and insert into history within a single SQL statement), minimizes locking impact, records per-batch metrics, and throttles between batches. Its business value is to keep the live audit table lean for faster operational queries while preserving full history in a dedicated table, with progress visibility via a metrics log.

Main Functional Characteristics

  • Data operation types:

    • Query: Select candidate rows by time range and order by id.
    • Delete: Remove selected rows from the hot table and return the deleted rows.
    • Insert: Insert deleted rows into the history table.
    • Insert: Record per-batch archive metrics.
    • Control/utility: Looping, sleep for throttling, diagnostics for row counts, exception on invalid input.
  • Business logic description:

    • Validates that the time window is correct (p_from < p_to); otherwise raises an exception.
    • Repeatedly performs batch moves:
      • Selects up to p_batch rows from ops.audit_logs whose created_at is within [p_from, p_to), ordered by id for deterministic batching.
      • Deletes those rows from ops.audit_logs and simultaneously captures the deleted rows (DELETE … RETURNING) inside the same statement.
      • Inserts the captured rows into ops.audit_logs_hist, ensuring each batch move is atomic.
      • Records the number of rows moved in ops.archive_audit_metrics with the time window and execution timestamp.
      • Stops when the last batch moves fewer than p_batch rows; otherwise sleeps briefly (50 ms) and continues.
  • Input/output parameters:

    • p_from timestamptz (input): Inclusive start of the archive window (created_at >= p_from).
    • p_to timestamptz (input): Exclusive end of the archive window (created_at < p_to).
    • p_batch integer (input, default 5000): Target batch size per iteration.
    • Output: None (procedure has side effects on tables and metrics).

Technical Implementation Analysis

  • Execution flow:

    1. Check p_from < p_to; if not, raise “Invalid time range”.
    2. Loop:
      • Single SQL statement with data-modifying CTE:
        • moved: select candidate rows by time window, ordered by id, limited by p_batch.
        • del: delete from ops.audit_logs using moved; return deleted rows.
        • Insert into ops.audit_logs_hist selecting from del (atomic move per batch).
      • Retrieve number of inserted rows via GET DIAGNOSTICS v_moved = ROW_COUNT.
      • Insert a metrics row into ops.archive_audit_metrics (run time, moved_rows, range_from, range_to).
      • If v_moved < p_batch, exit; otherwise sleep 50 ms and iterate.
    3. End.
  • Key technical points:

    • Atomic batch move: Using a data-modifying CTE (DELETE … RETURNING) feeding the INSERT within one statement ensures each batch either fully moves or does nothing on error.
    • Half-open time window [p_from, p_to) prevents overlap across adjacent runs and supports safe reruns with the same p_to.
    • Deterministic batching via ORDER BY id with LIMIT avoids reprocessing/skipping in concurrent environments.
    • v_moved uses ROW_COUNT of the INSERT statement to reflect exactly how many rows were archived in that batch.
    • Throttling with pg_sleep(0.05) reduces sustained lock pressure and resource spikes between batches.
    • Metrics per batch provide operational observability (progress and throughput).
  • Performance considerations:

    • Filtering and ordering efficiency depend on indexing (e.g., created_at for the predicate, id for ordering/PK lookups).
    • Each run executes in the caller’s transaction context; long-running transactions retain dead tuples until commit, increasing bloat/WAL and delaying vacuum.
    • Large payload moves generate disk I/O and WAL; batch size affects throughput vs. impact on concurrency.
    • Per-batch metrics insert adds write overhead and grows the metrics table with large archival windows.
    • The selection is evaluated each iteration; rows newly meeting the time predicate during the run will be included in subsequent batches.

Usage Scenarios

  • Applicable business scenarios:

    • Periodic archiving of audit trails from an active table to a history table to maintain performant OLTP workloads while preserving full audit history.
    • Operational maintenance tasks where online, low-lock impact movement of older records is required.
  • Invocation timing:

    • Scheduled jobs (e.g., nightly) to move logs older than a threshold into history.
    • On-demand archival before heavy maintenance or index operations on the hot table.
  • Expected outcome:

    • All rows in ops.audit_logs with created_at in [p_from, p_to) are removed from the hot table and inserted into ops.audit_logs_hist.
    • ops.archive_audit_metrics contains one row per batch with the number of rows moved and the time window.
    • The hot table size and write amplification for ongoing workloads are reduced, while history remains available.

Notes

  • Usage constraints:

    • p_from must be earlier than p_to; otherwise the procedure fails with “Invalid time range”.
    • The batch move is atomic per iteration; if the INSERT into history fails, the associated DELETE is rolled back for that batch.
    • No explicit conflict handling is present for inserts into ops.audit_logs_hist; if a row with the same primary key already exists, the batch will fail.
    • The time window is half-open: created_at >= p_from and created_at < p_to.
    • The procedure does not manage transactions internally; it executes within the caller’s transaction scope.
  • Maintenance points:

    • Monitor growth of ops.archive_audit_metrics when archiving large ranges or running frequently.
    • Overall runtime and resource usage are sensitive to batch size, data volume, payload size, and available indexes.
    • Consider operational windows and concurrency expectations; deletes acquire row-level locks on the hot table rows being moved.

存储过程功能概述

本ストアドプロシージャ sp_refresh_user_balance は、指定ユーザーの残高を、指定期間内の入出金台帳(ledger)の集計結果で更新し、その結果を監査テーブルに記録するとともに、新しい残高を出力パラメータで返します。トランザクションと行ロックを用いて同時更新を防ぎ、期間集計と残高更新・監査記録を一体で整合的に行う点に業務的価値があります。

主要功能特性

  • データ操作タイプ:

    • 読み取り(SELECT … FOR UPDATE による行ロック取得)
    • 集計(SUM)
    • 更新(UPDATE)
    • 追加(INSERT)
    • トランザクション制御(START TRANSACTION/COMMIT)
  • ビジネスロジック記述:

    1. users テーブルの対象ユーザー行を行ロックし、現在の残高を取得。
    2. ledger テーブルから、指定期間内の「入金(type='CREDIT')」合計と「出金(type='DEBIT')」合計をそれぞれ算出。
      • 期間条件は tx_date >= p_from AND tx_date < DATE_ADD(p_to, INTERVAL 1 DAY)(p_to 当日を含む半開区間)。
      • 対象期間に該当行がない場合は 0 とみなす。
    3. 新残高 = 旧残高 + 入金合計 - 出金合計 を計算。
    4. users 残高と残高更新時刻(UTC)を更新。
    5. balance_audit に期間、入出金合計、最終残高、作成時刻(UTC)を記録。
    6. トランザクションをコミットし、新残高を出力パラメータに設定。
  • 入出力パラメータ:

    • IN p_user_id BIGINT: 対象ユーザーID
    • IN p_from DATE: 集計開始日(この日を含む)
    • IN p_to DATE: 集計終了日(この日を含む)
    • OUT p_new_balance DECIMAL(18,2): 更新後のユーザー残高

技术实现分析

  • 実行フロー:

    1. トランザクション開始。
    2. users.id = p_user_id を FOR UPDATE で読み取り、v_bal に現在残高を取得(行ロック)。
    3. ledger から CREDIT の期間合計を v_credit に取得。
    4. ledger から DEBIT の期間合計を v_debit に取得。
    5. v_bal = v_bal + v_credit - v_debit を計算。
    6. users を新残高と UTC の更新時刻で更新。
    7. balance_audit に監査レコードを挿入。
    8. コミットし、p_new_balance に v_bal を返却。
  • 关键技术点:

    • 行ロック(SELECT … FOR UPDATE)で対象ユーザー行の同時更新競合を抑止。
    • 期間条件は「>= p_from かつ < p_to+1日」を採用し、p_to 当日を含めた日付範囲を厳密に表現。
    • IFNULL(SUM(...), 0) により対象なしでも 0 として安全に集計。
    • 更新・監査挿入までを単一トランザクションで原子化。
    • タイムスタンプは UTC_TIMESTAMP() を一貫使用(監査・更新時刻の統一性)。
  • 性能考虑:

    • ledger に対する期間集計(CREDIT/DEBIT で2回)は、データ量・期間長に比例して I/O 負荷が増加。
    • 効率的な検索には、ledger(user_id, tx_date[, type]) や少なくとも user_id と tx_date を先頭とするインデックスが有効。
    • users.id は主キー/一意インデックスが前提。
    • トランザクション中は users の対象行がロックされるため、ロック保持時間が長いと待機が発生。
    • 監査テーブル balance_audit は実行毎に1行増えるため、肥大化による検索性能への影響に留意。

使用场景说明

  • 适用业务场景:

    • 指定期間の入出金に基づくユーザー残高の再計算・調整。
    • 日次締め処理や特定期間の照合(リコンシリエーション)。
    • 障害・遅延発生後の残高補正や再同期に伴う更新と監査記録。
  • 调用时机:

    • 期間の入出金計上が確定した後のバッチ処理や運用オペレーション。
    • 特定ユーザーの残高不整合検知時の是正処置としてオンデマンド実行。
    • 監査やレポート作成前の整合性担保。
  • 预期效果:

    • users の残高が指定期間の入出金反映後の正味値に更新される。
    • balance_audit に対象期間・入金合計・出金合計・最終残高が記録され、追跡可能性が向上。
    • 新残高が出力パラメータで取得可能。

注意事项

  • 使用约束:

    • users に対象行が存在しない場合、SELECT … INTO は行無しでエラーとなり得る(エラーハンドラは未実装)。
    • 同一の期間で本プロシージャを複数回実行すると、同じ期間の入出金が都度加減算される挙動となるため、運用上の再実行可否・回数管理が重要。
    • ledger.type は 'CREDIT' と 'DEBIT' のみを集計対象としている。他の種別は無視される。
    • 期間条件は p_from 以上かつ p_to 当日を含む。日時型の tx_date を扱う場合、時刻・タイムゾーンの設計と境界条件を確認すること。
    • トランザクション分離レベルにより、実行中に新規コミットされた ledger 行の可視性が変わる(MySQL 既定の REPEATABLE READ ではスナップショットに基づく一貫読み取り)。
  • 维护要点:

    • ledger の期間集計に適したインデックス設計の維持(user_id、tx_date、必要に応じて type)。
    • balance_audit の増加に伴う保守(パーティショニング、アーカイブ運用、統計・索引の管理)。
    • 残高更新の再実行ポリシーや重複監査記録の運用ルール整備。
    • UTC 時刻での記録方針と業務上のタイムゾーン要件の整合確認。
    • トランザクション競合・ロック待ちの監視(実行タイミング・期間幅・対象ユーザー数に応じた運用計画)。

示例详情

解决的问题

将复杂晦涩的存储过程,一键拆解为“看得懂、可复用、能决策”的标准化说明。帮助DBA、开发、运维与产品/合规团队在数分钟内:1) 准确读懂功能目的与执行路径;2) 快速识别性能与风险点;3) 直接生成可归档的技术说明;4) 为评审、迁移、排障与培训提供统一依据。通过这套提示词,用户可显著缩短评审周期、降低沟通与交接成本、避免关键知识流失,并提升系统稳定性与上线质量,进而从试用过渡到团队级付费使用。

适用用户

数据库管理员(DBA)

快速解读遗留存储过程,定位潜在慢点,制定优化与归档计划,沉淀维护手册,显著缩短故障定位与变更评审时间

后端开发工程师

在开发与代码评审前准确掌握参数与执行流程,编写调用说明与异常处理策略,评估改动影响范围,减少返工

系统架构师

盘点关键存储过程与业务依赖,评估替换与解耦可行性,制定数据库治理路线与风险控制方案

特征总结

一键解析存储过程,生成结构化说明文档,快速读懂核心功能与业务价值
自动梳理执行流程与数据流向,呈现步骤化逻辑,降低跨团队沟通成本
智能识别性能隐患与瓶颈环节,给出优化方向提示,提前规避上线风险
清晰列出输入输出参数及作用,帮助评审变更影响,减少遗漏与回归
将技术实现映射到业务规则,补齐文档空白,方便知识沉淀与传承
输出调用时机与适用场景建议,指导日常运维排障与高峰期调用策略
自动生成注意事项与维护要点,提醒使用约束,减少误用导致的事故
支持按需定制模板结构与术语风格,适配开发评审、审计合规等场景
支持多语言文档输出与团队共享,便于跨区域协作与供应商对接
适配遗留系统与新项目评审,快速接手旧库代码,缩短熟悉与交付周期

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 761 tokens
- 2 个可调节参数
{ 存储过程代码 } { 输出语言 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59