2013-01-07 37 views
13

CÂU HỎI THƯỜNG GẶP! Khi tôi đánh vần mọi thứ chính xác, vấn đề sẽ biến mất!Phạm vi của các bảng tạm thời được tạo trong thủ tục lưu sẵn MySQL

Tôi có quy trình lưu trữ MySQL tạo bảng tạm thời. Khi tôi gọi thủ tục từ dấu nhắc mysql, nó xuất hiện để chạy thành công, nhưng nếu tôi sau đó SELECT COUNT (*) từ bảng tạm thời, tôi nhận được một lỗi nói rằng bảng không tồn tại.

Có một bảng tạm thời được tạo bên trong một thủ tục được lưu trữ không còn tồn tại khi thủ tục được lưu trữ kết thúc?

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 
+0

No. Nó vẫn còn ở đó. Bạn có thể đưa mã vào đây không? – ethrbunny

+0

delimiter // quy trình thả nếu tồn tại sp_temp_reciepts // tạo thủ tục sp_temp_receipts() bắt đầu – user1956095

+0

Vui lòng chỉnh sửa bài đăng gốc của bạn để bao gồm mã. – ethrbunny

Trả lời

13

Câu hỏi này đã hơn một tuổi. Nó xứng đáng là một câu trả lời. Ở đây nó đi:

Tôi vừa thấy câu hỏi này hôm nay trong DBA StackExchange: How long will a temporary MEMORY table persist if I don't drop it (MySQL). Tôi vừa trả lời. Trong phần I nói điều này:

Theo the Book

kdsjx

Chương 5 có một phân nhóm Trở Kết quả Sets để khác Stored Procedure.

Nó nói tại khoản 2 trên trang 117:

Thật không may, cách duy nhất để vượt qua một tập hợp kết quả từ một thủ tục lưu trữ khác là phải vượt qua các kết quả thông qua một bảng tạm thời. Đây là một giải pháp khó xử b, và - vì bảng tạm thời có phạm vi trong suốt toàn bộ phiên - nó tạo ra nhiều vấn đề bảo trì tương tự được nâng lên bằng cách sử dụng các biến toàn cầu. nhưng nếu một chương trình được lưu trữ cần cung cấp một chương trình được lưu trữ khác với kết quả, thì một bảng tạm thời có thể là giải pháp tốt nhất.

Mặc dù câu hỏi đã bị xóa do đánh vần sai bảng, quan điểm này cần được thể hiện và học bởi tất cả những người gọi thủ tục lưu trữ MySQL và cần dữ liệu của họ.

Các vấn đề liên quan