如何从 MySQL 中的存储过程返回字符串值?

Posted

技术标签:

【中文标题】如何从 MySQL 中的存储过程返回字符串值?【英文标题】:How to return a String value from a Stored Procedure in MySQL? 【发布时间】:2021-08-15 21:05:56 【问题描述】:

我想从存储过程中返回一个值,我可以在 JPA 存储库中的 Spring Boot 服务器中使用它。 这是我的存储过程,我想知道如何从过程中返回字符串。

DELIMITER //

CREATE PROCEDURE GetAllProducts(out query varchar(20))
BEGIN
    SET query=SELECT title FROM course where description="just a course";
RETURN @query;       
END //

DELIMITER ;

我正在从查询表中选择 1 个值来返回它。

有人可以帮忙吗? 谢谢!

【问题讨论】:

那个代码没有选择任何东西? 使用这些确切参数运行时,该查询通常会返回什么?为什么你的返回值叫做“查询”?为什么这么小? 返回在 SP 中无效,我认为那只在函数中有效 我从选择查询返回一个字符串 现在我想退货 【参考方案1】:

如果你想使用你的 SP 作为数据源(就像你在外部程序中执行 SELECT,而不是 CALL),你必须选择输出流,而不是变量:

CREATE PROCEDURE GetAllProducts()
SELECT title 
FROM course 
WHERE description="just a course";

【讨论】:

上述查询会返回标题吗? 我不需要BEGINEND 关键字吗? 在执行上述查询并稍后从 Spring API 调用它后,我收到此错误Parameter number 1 is not an OUT parameter @HimanshuRanjan 上面的查询会返回标题吗?什么是“标题”? SQL 中没有这样的术语。 我不需要 BEGIN 和 END 关键字吗? 是的。 我收到此错误 参数号 1 不是 OUT 参数 这可能是 API 的一些功能。【参考方案2】:

找到解决方案,现在可以使用了!

只是稍微调整了程序:

DELIMITER //
CREATE PROCEDURE GetAllProdcuts(OUT output VARCHAR(50))
BEGIN
SELECT title into output
FROM course 
WHERE description="just a course";
END //

【讨论】:

BEGIN-END 和分隔符重新分配在您的情况下是多余的。只需CREATE PROCEDURE GetAllProdcuts(OUT output VARCHAR(50)) SELECT title into output FROM course WHERE description="just a course";

以上是关于如何从 MySQL 中的存储过程返回字符串值?的主要内容,如果未能解决你的问题,请参考以下文章

java如何获得mysql存储过程的返回值

Mysql:如果记录中的字段为空,我希望存储过程返回 N/A 作为值

如何在mysql中存储存储过程的返回值

无法从 mysql 存储过程中看到任何值

如何php调用oracle存储过程返回的是一个结果集,该怎么从php页面中吧数据循环输出呀

VB.NET是如何使用ADO让存储过程返回数据表中的值呢?求解!