Как использовать DROP TABLE IF EXISTS в хранимой процедуре MySQL

Я хочу знать, как использовать 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 или в процедуре?

Спасибо.

17
задан octopusgrabbus 13 June 2012 в 13:40
поделиться