×
¥
查看详情
🔥 会员专享 文生文 数据集

存储过程功能分析专家

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

🎯 可自定义参数(2个)

存储过程代码
需要分析的存储过程完整代码
输出语言
输出内容的语言选择

🎨 效果示例

存储过程功能概述

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 時刻での記録方針と業務上のタイムゾーン要件の整合確認。
    • トランザクション競合・ロック待ちの監視(実行タイミング・期間幅・対象ユーザー数に応じた運用計画)。

示例详情

📖 如何使用

模式 1:即插即用(手动档)
直接复制参数化模版。手动修改 {{变量}} 即可快速发起对话,适合对结果有精准预期的单次任务。
加载中...
💬 模式 2:沉浸式引导(交互档)
一键转化为交互式脚本。AI 将化身专业面试官或顾问,主动询问并引导您提供关键信息,最终合成高度定制化的专业结果。
转为交互式
🚀 模式 3:原生指令自动化(智能档)
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别“手动搬运”。
安装插件
🔌 发布为 API 接口
将 Prompt 接入自动化工作流,核心利用平台批量评价反馈引擎,实现"采集-评价-自动优化"的闭环。通过 RESTful 接口动态注入变量,让程序在批量任务中自动迭代出更高质量的提示词方案,实现 Prompt 的自我进化。
发布 API
🤖 发布为 Agent 应用
以此提示词为核心生成独立 Agent 应用,内嵌相关工具(图片生成、参数优化等),提供完整解决方案。
创建 Agent

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。

试用后开通会员即可无限使用

加载中...