用途:在数据库中封装复杂业务逻辑,用存储过程与函数保证一致性、减少往返并贴近数据源强制数据完整性。
决策树:需要返回值用 FUNCTION;需要事务控制用 PROCEDURE;需要自动更新用 TRIGGER;需要审计追踪用带 AUDIT_LOG 的触发器;需要错误处理用 EXCEPTION 块。
函数与过程:函数用于确定性操作、返回单值或只读结果集,应尽量无副作用,命名 fn_动词_名词;过程用于需要 COMMIT/ROLLBACK 的事务控制,或跨多表编排 INSERT、UPDATE、DELETE,命名 sp_动词_名词。
结构与标准:使用 CREATE OR REPLACE 便于重新部署,并加标准头部注释块。参数以 p_ 前缀、内部变量以 v_ 前缀,严格类型;变量在 DECLARE 块声明并赋默认值。
最佳实践:用 EXCEPTION 块优雅处理或带上下文重抛错误,统一错误消息;性能上优先集合操作而非循环,尽早检查无效条件提前返回;安全上慎用 SECURITY DEFINER,优先默认 SECURITY INVOKER,并设置 search_path 防止路径劫持。
触发器:用于审计日志、派生数据(如 updated_at)和复杂约束;避免级联触发、过重逻辑和隐藏副作用,触发器应轻量,复杂逻辑交给显式过程。
审计日志:可建 AUDIT_LOG 表记录 table_name、operation、old_data、new_data、changed_by、changed_at 等字段,记录重要 DML 操作。
限制:资料未提供具体安装命令、平台支持范围、收费与价格信息。