MySQL存储过程在过程结束前返回结果
在存储过程运行完毕之前,是否可以在存储过程中返回select语句的结果?例如:MySQL存储过程在过程结束前返回结果,mysql,stored-procedures,Mysql,Stored Procedures,在存储过程运行完毕之前,是否可以在存储过程中返回select语句的结果?例如: Create Procedure 'TestProc'() Begin //Do some stuff Select 'column' from table'; //Do some more stuff End 是否可以立即返回select语句的结果,并让过程在事后继续执行它的操作 谢谢选择后,你想继续做什么?也许您可以将select查询插入临时表,继续执行其他操作,然后在最后选择?临时表的值仍然是在例程中
Create Procedure 'TestProc'()
Begin
//Do some stuff
Select 'column' from table';
//Do some more stuff
End
是否可以立即返回select语句的结果,并让过程在事后继续执行它的操作
谢谢选择后,你想继续做什么?也许您可以将select查询插入临时表,继续执行其他操作,然后在最后选择?临时表的值仍然是在例程中返回的,但您仍然可以继续执行“其他操作” 从下面编辑评论: 对我来说,这应该通过执行以下操作的应用程序来处理 -将当前存储过程分成两部分
您可以完成以下步骤:
CREATE PROCEDURE myProcedure(Val INT)
proc:BEGIN
IF Val=5 then
Select ‘Bye’;
LEAVE proc;
END IF;
Select * from myTable t t.Value=Value;
END;
好像你还没试过这个 无界的
SELECT
语句(即,不在子查询、派生表或SELECT…INTO
中)将立即将结果返回给客户端
MySQL支持一个非常有用的扩展,它支持在存储过程中使用常规SELECT语句(即不使用游标或局部变量)。这种查询的结果集直接发送到客户机
-
结果一可用就发送给客户端,而不是在过程终止后。通过使用MySQL命令行客户端调用该过程可以很容易地演示这一点
但是,您将遇到的问题是,应用程序线程最终必须等待该过程终止,因为如果它过早断开连接,该过程可能会中止,或者应用程序可能会在该过程完成之前尝试将数据库连接重新用于不同的请求,从而导致无法预测的结果,充其量
如果您的应用程序能够在过程执行结束时可靠地保持,那么这将满足您的需要;否则,您将需要不同的解决方案
Create Procedure 'TestProc'() Begin
//Do some stuff
Insert into temptable(column)
Select 'column' from table';
//Do some more stuff
End
注意:通过这种方式,您可以访问select from tentable的值,该过程将继续执行后面的内容
访问该值后,可以将其从表中删除。要添加更多,您可以插入一些会话级别的标识符以进行分岔。谢谢您的回复。此过程将非常大的已删除字符串作为参数。在过程的开头,我解析了字符串的一部分并进行了插入。在第一次插入后,我进行相关的选择。它返回插入的最后一个插入id值。这是调用过程的应用程序所关心的唯一值。在选择之后,我解析字符串的剩余部分,并运行while循环来插入大量插入。这需要一点时间,并导致应用程序出现问题…是的,我会这样做,但不幸的是,我无法控制应用程序本身。至少不是代码的这一部分…所以即使在离开过程之后,它也会继续运行select语句,或者在我的例子中是一堆insert语句?不,这个答案的其余部分只是完成15个字符的最低要求。