làm việc theo những gì Code-Monk đã viết, hãy xem xét những điều sau:
drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
drop temporary table if exists temp; -- could be some other random structure residue
create temporary table temp
SELECT aID, bID
FROM tags
WHERE placeID = "abc" AND tagID = "def";
-- use the temp table somehow
-- ...
-- ...
-- ...
drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter
Quy trình lưu trữ thử nghiệm
call uspK(); -- test it, no warnings on edge conditions
Không nên làm gì
Một người sẽ không tìm thấy nhiều may mắn với những điều sau đây. Nếu bạn nghĩ vậy, hãy chạy nó một vài lần;
drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
-- drop temporary table if exists temp;
create temporary table if not exists temp
SELECT aID, bID
FROM tags
WHERE placeID = "abc" AND tagID = "def";
-- use the temp table somehow
-- ...
-- ...
-- ...
-- drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter
bởi vì create temporary table if not exists temp
có vảy
Nhận xét chung
Người ta không nên bắt tay vào viết các tài liệu lưu trữ cho đến khi phần nào thông thạo về chủ đề đơn giản của DELIMITERS. Đã viết về chúng trong một phần tại đây được gọi là Dấu phân cách . Chỉ hy vọng giúp bạn thoát khỏi thời gian lãng phí không cần thiết cho một việc đơn giản như vậy, còn hơn có thể lãng phí nhiều thời gian gỡ lỗi.
Ngoài ra, ở đây trong câu hỏi của bạn, cũng như trong tài liệu tham khảo đó, hãy nhớ rằng việc tạo bảng là DDL cái đó có thể có một tỷ lệ lớn của cấu hình tổng thể (hiệu suất). Nó làm chậm một proc so với việc sử dụng một bảng có sẵn từ trước. Người ta có thể nghĩ rằng cuộc gọi là tức thời, nhưng không phải vậy. Do đó, về hiệu suất, việc sử dụng một bảng có sẵn với những kết quả được đưa vào rowId được phân đoạn của riêng chúng sẽ nhanh hơn nhiều so với việc chịu đựng chi phí DDL.