如何在Mysql准备的语句中设置param?
如何将out参数设置为语句返回的值?对于简单的示例,您根本不需要准备好的语句:如何在Mysql准备的语句中设置param?,mysql,Mysql,如何将out参数设置为语句返回的值?对于简单的示例,您根本不需要准备好的语句: PROCEDURE count_apples(OUT cnt INT) BEGIN SET @SqlQuery = 'SELECT count(apple) FROM tree'; PREPARE PrepStmt1 FROM @SqlQuery; EXECUTE PrepStmt1; DEALLOCATE PREPARE PrepStmt1; END 但是,如果这只是一个示例,并且
PROCEDURE count_apples(OUT cnt INT)
BEGIN
SET @SqlQuery = 'SELECT count(apple) FROM tree';
PREPARE PrepStmt1 FROM @SqlQuery;
EXECUTE PrepStmt1;
DEALLOCATE PREPARE PrepStmt1;
END
但是,如果这只是一个示例,并且您的查询实际查询更复杂,因此您确实需要准备语句,那么您需要使用用户定义的变量来保存结果,然后将其复制到OUT
参数,该参数的行为类似于程序变量
PROCEDURE count_apples(OUT cnt INT)
BEGIN
SET cnt = (SELECT count(apple) FROM tree);
END
您不能在准备好的语句中引用任何存储的程序变量(in、out、inout、DECLAMED或其他),只能引用以@
开头且与任何同名程序变量完全无关的语句
必须复制这些值的原因是,准备好的语句的作用域是创建它们的会话,而不是过程。它们存在于过程的底层环境中,而不是过程本身内部。要查看此操作,请在过程中准备一个已准备好的语句,但不要执行它或取消分配它。然后,当该过程完成时,您会发现仍然可以执行该过程
出于同样的原因,如果使用占位符的变量执行stmt?
占位符,那么这些变量也必须是@
用户定义的变量——由于准备语句的范围,您也不能在那里使用程序变量
PROCEDURE count_apples(OUT cnt INT)
BEGIN
SET @SqlQuery = 'SET @cnt = (SELECT count(apple) FROM tree)';
PREPARE PrepStmt1 FROM @SqlQuery;
EXECUTE PrepStmt1;
DEALLOCATE PREPARE PrepStmt1;
SET cnt = @cnt;
END