加载中...

| MySQL 支持版本 | 5.0 起 |
| Oracle/PostgreSQL 语言 | PL/SQL / PL/pgSQL |
| 调用语法 | CALL procedure_name(参数) |
存储过程(Stored Procedure)使用数据库厂商特定的过程式语言编写:Oracle 和 PostgreSQL 用 PL/pgSQL,SQL Server 用 T-SQL,MySQL 5.0 起支持自己的存储过程语法(类似 SQL/PSM 标准)。代码保存在数据库服务器端,客户端通过 CALL procedure_name(args) 调用,服务器执行后返回结果。
一个典型的好处是减少网络往返:把原本需要多次 SQL 交互的逻辑(查账户余额、扣款、写日志)写进一个存储过程,客户端只需发一次调用请求,所有操作在数据库内部完成。[1]
存储过程在企业开发中始终充满争议。支持者认为它性能好(预编译)、安全性高(通过权限控制调用)、减少重复代码;反对者则指出它让代码分散在两处(应用和数据库),版本控制困难,调试工具远不如应用层成熟,数据库迁移时要重写大量逻辑,水平扩展时也是瓶颈。
互联网行业普遍不用存储过程,而传统金融、电信行业的遗留系统往往深度依赖它——有的系统有几千个存储过程,改一个都如履薄冰。PostgreSQL 的 PL/pgSQL 是相对功能最完善的实现,支持异常处理、游标、动态 SQL,甚至可以用 PL/Python 或 PL/v8(JavaScript)编写存储过程。

| MySQL 支持版本 | 5.0 起 |
| Oracle/PostgreSQL 语言 | PL/SQL / PL/pgSQL |
| 调用语法 | CALL procedure_name(参数) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧