存储过程(Stored Procedure)的调用方式,通常可以从数据库内部调用和应用程序(外部)调用两个维度来划分。下面以常见关系型数据库(如 MySQL、SQL Server、Oracle、PostgreSQL)为主进行说明。
最常见方式,在数据库客户端或脚本中执行:
-- MySQL / SQL Server / PostgreSQL
CALL proc_name(param1, param2);
-- Oracle
BEGIN
proc_name(param1, param2);
END;
/
存储过程可以相互调用:
CREATE PROCEDURE proc_a()
BEGIN
CALL proc_b();
END;
某些数据库允许在触发器中调用存储过程。
如 MySQL Event、SQL Server Agent Job、Oracle DBMS_SCHEDULER。
CallableStatement cs = conn.prepareCall("{call proc_name(?, ?)}");
cs.setString(1, "a");
cs.execute();
SqlCommand cmd = new SqlCommand("proc_name", conn);
cmd.CommandType = CommandType.StoredProcedure;
<select statementType="CALLABLE" parameterType="map">
{call proc_name(#{p1,mode=IN})}
</select>
cursor.callproc("proc_name", [param1, param2])
$stmt = $pdo->prepare("CALL proc_name(?, ?)");
$stmt->execute([$p1, $p2]);
CALL proc_name();
CALL proc_name(1, 'abc');
CALL proc_name(@result);
SET @x = 10;
CALL proc_name(@x);
SELECT func_name(1, 2);
SET @sql = 'CALL proc_name(1)';
PREPARE stmt FROM @sql;
EXECUTE stmt;
| 调用场景 | 常见方式 |
|---|---|
| 数据库内 | CALL / BEGIN END / 触发器 / 事件 |
| 应用程序 | JDBC / MyBatis / ADO.NET / Python |
| 参数类型 | IN / OUT / INOUT |
| 特殊方式 | 动态SQL / 函数调用 |
如果你有具体数据库(MySQL / Oracle / SQL Server)或使用场景(如 MyBatis、Spring),我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。