Я хочу знать, как использовать DROP TABLE IF EXISTS
в MySQLstored процедуре.
Я пишу довольно длинную хранимую процедуру MySQL, которая выполнит кучу работы, а затем загрузит временную таблицу с результатами. Однако у меня возникли проблемы с выполнением этой работы.
Я видел несколько способов сделать временную таблицу. По сути, вы либо создаете временную таблицу, работаете с ней, а затем удаляете ее в конце ... или вы удаляете ее, если она существует, создаете ее, а затем выполняете свою работу над ней.
Я предпочитаю второй метод так что вы всегда начинаете с чистого листа, и это встроенная проверка существования таблицы. Однако я не могу заставить его работать:
Вот мои примеры:
Это работает:
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();
Это работает:
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();
Это не так:
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 работы, но если эта таблица существует (например, если процедура не завершилась или что-то еще), она, очевидно, завершится ошибкой «Table tblTest not Существует». Нерабочий пример - это то, что я ищу - отбросьте стол, если он там, а затем воссоздайте его, чтобы я мог начать чистоту.
Такое чувство, что это «ЕСЛИ СУЩЕСТВУЕТ», что делает эту вещь неудачной. Я скопировал код со всех видов сайтов, которые делают вещи очень похожими, и ни в коем случае я не могу заставить работать «DROP TABLE IF EXISTS ...». Ever.
Dev Server: версия сервера MySQL: сообщество 5.1.47 Prod Server: версия MySQL Server: 5.0.45-log
Мы не можем изменить версии БД (администраторы БД этого не допустят), поэтому я застрял на том, что имею. Это ошибка в MySQL или в процедуре?
Спасибо.