Tôi muốn biết làm thế nào để sử dụng DROP TABLE IF EXISTS
trong một thủ tục MySQLstored. Tôi đang viết một thủ tục lưu trữ mySQL khá dài sẽ thực hiện một loạt công việc và sau đó tải lên một bảng tạm thời với kết quả. Tuy nhiên, tôi đang gặp khó khăn khi thực hiện công việc này.Làm thế nào để sử dụng DROP BẢNG NẾU EXISTS trong một thủ tục lưu trữ MySQL
Tôi đã nhìn thấy một vài cách để thực hiện điều bảng tạm thời. Về cơ bản, bạn tạo bảng tạm thời, làm việc trên nó, và sau đó thả nó vào cuối ... hoặc bạn thả nó nếu nó tồn tại, tạo ra nó, và sau đó làm công việc của bạn trên đó.
Tôi thích phương pháp thứ hai để bạn luôn bắt đầu làm sạch và đây là một kiểm tra tích hợp cho sự tồn tại của bảng. Tuy nhiên, tôi dường như không thể có được nó để làm việc:
Dưới đây là những ví dụ của tôi:
này Tác phẩm:
DELIMITER//
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
DROP TEMPORARY TABLE tblTest;
END//
DELIMITER ;
CALL pTest();
này Tác phẩm:
DELIMITER//
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
DROP TEMPORARY TABLE tblTest;
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
END//
DELIMITER ;
CALL pTest();
Điều này không:
DELIMITER//
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
DROP TEMPORARY TABLE IF EXISTS tblTest;
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
END//
DELIMITER ;
CALL pTest();
2 công việc đầu tiên, nhưng nếu bảng đó tồn tại (như nếu thủ tục không hoàn thành hoặc gì đó), nó sẽ kết thúc với lỗi "Bảng tblTest không tồn tại". Ví dụ không làm việc là những gì tôi đang tìm kiếm - thả bảng nếu nó ở đó và sau đó tạo lại nó để tôi có thể bắt đầu làm sạch.
Có vẻ như đó là "NẾU DANH SÁCH" làm cho điều này thất bại. Tôi đã sao chép mã từ tất cả các loại trang web làm những việc rất giống nhau và trong mọi trường hợp tôi có thể nhận được "DROP TABLE IF EXISTS ..." để hoạt động. Không bao giờ.
Dev Server: phiên bản mySQL Server: 5.1.47-cộng đồng Prod Server: mySQL Server phiên bản: 5.0.45-log
Chúng ta không thể thay đổi db phiên bản (DBA sẽ không cho phép nó), vì vậy Tôi bị mắc kẹt với những gì tôi có. Đây có phải là lỗi trong mySQL hoặc trong Quy trình không?
Cảm ơn.
tôi có lẽ đã gửi sai số thực tế mà tôi nhận được ... [Err] 1064 - Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp đúng để sử dụng gần '// DELIMITER; CALL pTest() 'tại dòng 7 Đơn giản chỉ cần loại bỏ "IF EXISTS" loại bỏ lỗi và toàn bộ proc hoạt động (trừ khi, tất nhiên, bảng không tồn tại;) –