Quiero saber cómo usar DROP TABLE IF EXISTS
en un procedimiento almacenado en MySQL. Estoy escribiendo un procedimiento mySQL almacenado bastante largo que hará un montón de trabajo y luego cargará una tabla temporal con los resultados. Sin embargo, tengo problemas para hacer que esto funcione.Cómo utilizar DROP TABLE IF EXISTS en MySQL Stored Procedure
He visto algunas maneras de hacer lo de la tabla temporal. Básicamente, puede crear la tabla temporal, trabajar en ella y luego soltarla al final ... o la descarta si existe, la crea y luego hace su trabajo en ella.
Prefiero el segundo método para que siempre comience la limpieza, y es un control incorporado para la existencia de la tabla. Sin embargo, me parece que no puede conseguir que funcione:
Éstos son mis ejemplos:
esto funciona:
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();
Esto funciona:
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();
Esto no:
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();
Los primeros 2 funcionan, pero si esa tabla existe (como si el procedimiento no terminó o algo así), obviamente terminará con un error "Table tblTest does not exists". El ejemplo que no funciona es lo que estoy buscando: soltar la tabla si está allí y luego recrearla para poder comenzar a limpiar.
Parece que es el "SI EXISTE" haciendo que esto falle. He copiado código de todo tipo de sitios que hacen cosas muy similares y en ningún caso puedo obtener una "TABLA DE CAÍDA SI EXISTE ..." para que funcione. Nunca.
Dev por el servidor MySQL Server: 05/01/47 en la comunidad Prod Servidor: MySQL Server versión: 5.0.45-Log
No podemos cambiar db versiones (DBA no lo permiten), por lo Estoy atrapado en lo que tengo. ¿Es esto un error en mySQL o en el Procedimiento?
Gracias.
probablemente debería haber publicado el error real que consigo ... [Err] 1064 - Usted tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de '// DELIMITER; CALL pTest() 'en la línea 7 Simplemente eliminando el "IF EXISTS" elimina el error y todo el proceso funciona (a menos que, por supuesto, la tabla no exista;) –