use*_*095 15 mysql stored-procedures temp-tables
问题撤回!当我拼写正确的一切时,问题就消失了!
我有一个MySQL存储过程,它创建一个临时表.当我从mysql提示符调用该过程时,它似乎运行成功,但如果我然后从临时表中SELECT COUNT(*),我得到一个错误说该表不存在.
存储过程结束时,存储过程内创建的临时表是否不再存在?
mysql> delimiter //
mysql> drop procedure if exists sp_temp_reciepts//
mysql> create procedure sp_temp_receipts ()
begin
drop temporary table if exists receipts;
create temporary table receipts
( ... snip ...
);
insert into receipts
select ... snip ...
end//
mysql> delimiter ;
mysql> call sp_temp_reciepts();
Query OK, 46903 rows affected, 1 warning (2.15 sec)
mysql> select count(*) from receipts;
ERROR 1146 (42S02): Table 'receipts' doesn't exist
Run Code Online (Sandbox Code Playgroud)
Rol*_*DBA 16
这个问题已经有一年多了.值得一个答案.在这里:
我今天刚刚在DBA StackExchange中看到了这个问题:如果我不删除它(MySQL),临时MEMORY表会持续多长时间.我刚回答 在第一部分,我说:
根据书

第5章有一个副标题返回结果集到另一个存储过程.
它在第117页的第2段中说:
不幸的是,将结果集从一个存储过程传递到另一个存储过程的唯一方法是通过临时表传递结果.这是一个尴尬的解决方案b,并且 - 因为临时表在整个会话中都有范围 - 它会产生许多与使用全局变量引起的相同的可维护性问题.但是如果一个存储的程序需要提供另一个带有结果的存储程序,那么临时表可能是最好的解决方案.
尽管由于拼写错误而导致问题被删除,但是这种观点需要由所有致电MySQL存储过程并需要其数据的人员表达和学习.
| 归档时间: |
|
| 查看次数: |
8207 次 |
| 最近记录: |