温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

存储过程调用方式有哪些

发布时间:2026-11-04 07:23:10 来源:亿速云 阅读:92 作者:小樊 栏目:数据库

存储过程(Stored Procedure)的调用方式,通常可以从数据库内部调用和应用程序(外部)调用两个维度来划分。下面以常见关系型数据库(如 MySQL、SQL Server、Oracle、PostgreSQL)为主进行说明。


一、在数据库内部调用

1. 使用 SQL 命令直接调用

最常见方式,在数据库客户端或脚本中执行:

-- MySQL / SQL Server / PostgreSQL
CALL proc_name(param1, param2);

-- Oracle
BEGIN
  proc_name(param1, param2);
END;
/

2. 在另一个存储过程 / 函数中调用

存储过程可以相互调用:

CREATE PROCEDURE proc_a()
BEGIN
  CALL proc_b();
END;

3. 在触发器(Trigger)中调用

某些数据库允许在触发器中调用存储过程。

4. 通过事件 / 定时任务调用

如 MySQL Event、SQL Server Agent Job、Oracle DBMS_SCHEDULER。


二、在应用程序中调用(外部调用)

1. JDBC(Java)

CallableStatement cs = conn.prepareCall("{call proc_name(?, ?)}");
cs.setString(1, "a");
cs.execute();

2. ODBC / ADO.NET(C# / .NET)

SqlCommand cmd = new SqlCommand("proc_name", conn);
cmd.CommandType = CommandType.StoredProcedure;

3. MyBatis / Hibernate

  • MyBatis:
<select statementType="CALLABLE" parameterType="map">
  {call proc_name(#{p1,mode=IN})}
</select>

4. Python(pymysql / psycopg2 / cx_Oracle)

cursor.callproc("proc_name", [param1, param2])

5. PHP(PDO)

$stmt = $pdo->prepare("CALL proc_name(?, ?)");
$stmt->execute([$p1, $p2]);

三、按调用形式分类

1. 无参数调用

CALL proc_name();

2. 输入参数调用(IN)

CALL proc_name(1, 'abc');

3. 输出参数调用(OUT)

CALL proc_name(@result);

4. 输入输出参数(INOUT)

SET @x = 10;
CALL proc_name(@x);

四、特殊调用方式

1. 函数式调用(仅适用于 FUNCTION)

SELECT func_name(1, 2);

2. 动态 SQL 调用

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),我可以给你更精确的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手