如何从 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";
【讨论】:
上述查询会返回标题吗? 我不需要BEGIN
和END
关键字吗?
在执行上述查询并稍后从 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 中的存储过程返回字符串值?的主要内容,如果未能解决你的问题,请参考以下文章
Mysql:如果记录中的字段为空,我希望存储过程返回 N/A 作为值