mysql call_mysql CALL语法使用详解

mysql CALL语法使用详解2019-09-10 09:56

CALL语法

CALL sp_name([parameter[,...]])

CALL sp_name[()]

CALL语句调用先前定义的存储过程 CREATE PROCEDURE。

不带括号的存储过程可以在没有括号的情况下调用。也就是说,CALL p()而且 CALL p是等价的。

CALL可以使用声明为OUT或INOUT参数的参数将值传回给调用者 。当过程返回时,客户端程序还可以获取在例程中执行的最终语句受影响的行数:在SQL级别,调用该 ROW_COUNT()函数; 从C API,调用该 mysql_affected_rows()函数。

有关未处理条件对过程参数的影响的信息,请参见 第13.6.7.5节“条件处理和OUT或INOUT参数”。

要使用OUTor INOUT参数从过程中获取值 ,请通过用户变量传递参数,然后在过程返回后检查变量的值(如果要调用从另一个存储过程或函数内的程序,也可以通过常规参数或局部例程变量作为IN或INOUT 参数)。

对于一个INOUT参数,它传递给过程之前初始化它的值。

以下过程具有OUT过程设置为当前服务器版本的 INOUT参数,以及过程从其当前值开始递增的值:

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)

BEGIN

# Set value of OUT parameter

SELECT VERSION() INTO ver_param;

# Increment value of INOUT parameter

SET incr_param = incr_param + 1;

END;

在调用该过程之前,初始化要作为INOUT参数传递的变量。调用该过程后,将设置或修改两个变量的值:

mysql> SET @increment = 10;

mysql> CALL p(@version, @increment);

mysql> SELECT @version, @increment;

+------------------+------------+

| @version         | @increment |

+------------------+------------+

| 5.5.58-debug-log |         11 |

+------------------+------------+

在CALL使用PREPARE和的 EXECUTE预准备语句中,占位符可用于IN参数OUT和 INOUT参数。这些类型的参数可以使用如下:

mysql> SET @increment = 10;

mysql> PREPARE s FROM 'CALL p(?, ?)';

mysql> EXECUTE s USING @version, @increment;

mysql> SELECT @version, @increment; +------------------+------------+

| @version         | @increment |

+------------------+------------+

| 5.5.58-debug-log |         11 |

+------------------+------------+

要编写使用CALLSQL语句执行生成结果集的存储过程的C程序, CLIENT_MULTI_RESULTS必须启用该 标志。

这是因为CALL除了过程中执行的语句可能返回的任何结果集之外,每个都返回一个结果来指示调用状态。

CLIENT_MULTI_RESULTS如果CALL用于执行包含预准备语句的任何存储过程,则还必须启用。

无论何时加载这样的过程都无法确定这些语句是否会产生结果集,因此有必要假设它们会产生结果集。

CLIENT_MULTI_RESULTS可以在调用时启用mysql_real_connect(),可以通过传递CLIENT_MULTI_RESULTS 标志本身显式启用,也可以通过传递隐式 CLIENT_MULTI_STATEMENTS启用(也可以启用 CLIENT_MULTI_RESULTS)。

CLIENT_MULTI_RESULTS默认情况下启用。

要处理CALL 使用mysql_query()or 执行的语句 的结果mysql_real_query(),请使用调用的循环mysql_next_result()来确定是否有更多结果。

C程序可以使用prepared-statement接口来执行 CALL语句,访问 OUT和INOUT参数。

这是通过CALL使用循环处理语句的结果来完成的,该循环调用mysql_stmt_next_result()以确定是否有更多结果。

提供MySQL接口的语言可以使用预准备 CALL语句直接检索OUT和INOUT 过程参数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开放源代码的虚拟化平台,能够以容器的形式打包和分发应用程序。MySQL是一种流行的开源关系型数据库管理系统。使用Docker部署MySQL可以极大简化安装和配置的过程,并且能够实现数据的持久化。 首先,我们需要在Docker上搜索并选择适合的MySQL镜像。可以通过运行`docker search mysql`命令来查找可用的MySQL镜像。选择合适的镜像后,可以通过`docker pull <镜像名称>`来下载镜像,例如`docker pull mysql:latest`。 下载完成后,我们可以运行以下命令来创建一个MySQL容器: ``` docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your_password -d mysql:latest ``` 这个命令将会创建一个名为mysql的容器,并将MySQL服务的默认端口3306映射到宿主机的3306端口。同样,我们可以设置一个root密码,让MySQL服务有一个基本的访问控制。 这样,MySQL容器就成功运行起来了。我们可以通过`docker ps`命令来查看正在运行的容器。接下来,我们可以使用MySQL客户端连接到该容器。可以通过以下命令登录到MySQL容器内部的MySQL服务: ``` docker exec -it mysql mysql -uroot -p ``` 然后,我们可以在MySQL容器内部使用标准的MySQL命令来管理和操作数据库。 要实现数据的持久化,我们可以将MySQL容器内部的数据目录和宿主机的目录进行挂载。可以使用`-v`参数来指定目录的挂载点。例如: ``` docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your_password -v /path/to/mysql/data:/var/lib/mysql -d mysql:latest ``` 这将会将MySQL容器内部的`/var/lib/mysql`目录与宿主机上的`/path/to/mysql/data`目录进行挂载,从而实现数据的持久化。 通过以上步骤,我们可以使用Docker部署MySQL,并且实现数据的持久化。这样,我们可以方便地在不同的环境之间快速部署和迁移MySQL数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值