【发布时间】:2016-04-20 12:05:45
【问题描述】:
我的系统:MySQL 5.6.12
由于您不能像函数一样在 SQL 语句中使用存储过程,我想知道只有 SELECT 语句但没有 OUT/INOUT 参数或进行一些操作的存储过程是否有任何用途。
例子:
DELIMITER //
CREATE PROCEDURE sp ()
BEGIN
SELECT * FROM tbl;
END //
DELIMITER ;
我可以这样调用存储过程:
CALL sp();
它在 IDE 中显示了一个结果集,但除此之外我看不到任何真正的实际用途。
我错过了什么吗?
【问题讨论】:
-
可能是用不必要的存储程序弄乱数据库或者可能增加复杂性和混淆?或者,其目的可能是在不修改调用者的情况下添加修改 SQL 语句的能力。或者,也许它是增强程序的占位符。除此之外,我认为添加这样的程序没有任何好处。 (也许这是一个答案,而不是评论。)
-
有这样一个存储过程来帮助调试怎么样?
-
即使出于调试目的,如果没有 IN 参数,我认为使用这种过程比直接使用 select 语句或创建视图没有任何好处。
-
@spencer7593 和
IN参数在例如SQL 服务器。在那里,您可以在代码中使用结果集,而不仅仅是在编辑器中显示。但不幸的是,对于 sp,MySQL 显然还不成熟。 -
@John:MySQL 过程可以使用 IN 和 OUT 参数。 MySQL 过程还可以定义游标,从中获取行,并在过程中使用它们而不将结果集返回给调用者。也可以运行返回单行 INTO 过程或用户定义变量的 SELECT,同样而不将结果集返回给调用者。 (我之前的评论提到了一个 MySQL 存储过程,它包含 only 单个静态 SELECT 语句,该语句将单个结果集返回给调用者。这有原因吗?也许吧。有充分的理由吗? ? 不太可能)
标签: mysql sql procedure out inout