Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SELECT语句在MySQL存储过程中有意义吗?_Mysql_Sql_Procedure_Out_Inout - Fatal编程技术网

SELECT语句在MySQL存储过程中有意义吗?

SELECT语句在MySQL存储过程中有意义吗?,mysql,sql,procedure,out,inout,Mysql,Sql,Procedure,Out,Inout,我的系统:MySQL 5.6.12 因为不能像函数一样在SQL语句中使用storede过程,所以我想知道对于只有SELECT语句但没有OUT/INOUT参数或执行某些操作的存储过程是否有任何用处 例如: DELIMITER // CREATE PROCEDURE sp () BEGIN SELECT * FROM tbl; END // DELIMITER ; 我可以这样调用存储过程: CALL sp(); 它在IDE中显示了一个结果集,但除此之外,我看不到它

我的系统:MySQL 5.6.12

因为不能像函数一样在SQL语句中使用storede过程,所以我想知道对于只有SELECT语句但没有OUT/INOUT参数或执行某些操作的存储过程是否有任何用处

例如:

DELIMITER //
CREATE PROCEDURE sp ()
    BEGIN
        SELECT * FROM tbl;
    END //
DELIMITER ;
我可以这样调用存储过程:

CALL sp();
它在IDE中显示了一个结果集,但除此之外,我看不到它的任何实际用途


我遗漏了什么吗?

它所做的只是将查询的细节从调用方移开(这是一项有效的操作,简化了客户端代码并简化了模式迁移)。你也可以使用一个视图


如果存储过程需要获取参数,我只会选择它。

它所做的只是将查询的细节从调用方移开(这是一件有效的事情,可以简化客户端代码并简化模式迁移)。你也可以使用一个视图

如果存储过程需要获取参数,我只会选择它。

好吧,只有SELECT语句在推送它;但返回结果集的无参数存储过程有很多正当理由。蒂洛的回答提到了主要问题;为了加强这一点

如果经常需要一个特定的结果集(例如某种类型的监控/仪表板数据),但过于复杂而无法放入视图中,则所需的数据操作可以封装在这样一个存储过程中,从而减少了不同客户端独立复制相同确切步骤的需要。

,只有SELECT语句在推送它;但返回结果集的无参数存储过程有很多正当理由。蒂洛的回答提到了主要问题;为了加强这一点


如果经常需要特定的结果集(例如某种类型的监控/仪表板数据),但过于复杂而无法放入视图中,则所需的数据操作可以封装在这样的存储过程中,减少了不同客户端独立复制相同确切步骤的需要。

可能会用不必要的存储程序扰乱数据库,或者可能会增加复杂性和混淆?或者,其目的可能是添加在不修改调用方的情况下修改SQL语句的功能。或者,它可能是增强过程的占位符。除此之外,我认为添加这样的程序没有任何好处。(也许这是一个答案,而不是一个注释。)使用这样一个存储过程来帮助调试怎么样?即使出于调试目的,我也不认为使用这种过程比直接使用select语句或创建视图有任何好处,如果它没有IN参数。@spencer7593带有
IN
参数,则它在SQL Server中非常有用。在那里,您可以在代码中使用结果集,而不仅仅是在编辑器中显示。但不幸的是,MySQL对于sp来说显然还不成熟。@John:MySQL过程可以使用IN和OUT参数。MySQL过程还可以定义游标,从中获取行,并在过程中使用它们,而无需将结果集返回给调用方。也可以运行SELECT,将单行返回到过程或用户定义的变量中,而无需将结果集返回给调用者。(我之前的评论提到了一个MySQL存储过程,它只包含一个静态SELECT语句,向调用者返回一个resultset。这有什么原因吗?可能有什么原因吗?不太可能)可能会用不必要的存储程序将数据库弄得乱七八糟,或者可能会增加复杂性和混淆?或者,其目的可能是添加在不修改调用方的情况下修改SQL语句的功能。或者,它可能是增强过程的占位符。除此之外,我认为添加这样的程序没有任何好处。(也许这是一个答案,而不是一个注释。)使用这样一个存储过程来帮助调试怎么样?即使出于调试目的,我也不认为使用这种过程比直接使用select语句或创建视图有任何好处,如果它没有IN参数。@spencer7593带有
IN
参数,则它在SQL Server中非常有用。在那里,您可以在代码中使用结果集,而不仅仅是在编辑器中显示。但不幸的是,MySQL对于sp来说显然还不成熟。@John:MySQL过程可以使用IN和OUT参数。MySQL过程还可以定义游标,从中获取行,并在过程中使用它们,而无需将结果集返回给调用方。也可以运行SELECT,将单行返回到过程或用户定义的变量中,而无需将结果集返回给调用者。(我之前的评论提到了一个MySQL存储过程,它只包含一个静态SELECT语句,向调用者返回一个resultset。这有什么原因吗?可能有什么原因吗?不太可能)即使在参数中有
,它仍然保持不变:
创建过程sp(在id INT中)从tbl开始选择*,其中tbl.id=id;结束
是的,我就是这个意思。若它接受参数,则存储过程可以这样做。无法查看。即使使用
参数中的
,它也保持不变:
创建过程sp(在id INT中)开始从tbl中选择*FROM tbl,其中tbl.id=id;结束
是的,我就是这个意思。若它接受参数,则存储过程可以这样做。视图不能。