【问题标题】:How to return a String value from a Stored Procedure in MySQL?如何从 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 中无效,我认为那只在函数中有效
  • 我从选择查询返回一个字符串
  • 现在我想退货

标签: mysql sql spring-boot jpa stored-procedures


【解决方案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";
猜你喜欢
  • 2011-09-20
  • 2011-10-19
  • 2014-10-20
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多