Desidero sapere come utilizzare DROP TABLE IF EXISTS
in una procedura MySQLstored. Sto scrivendo una stored procedure mySQL piuttosto lunga che farà un sacco di lavoro e quindi caricherà una tabella temporanea con i risultati. Tuttavia, sto avendo problemi a fare questo lavoro.Come utilizzare DROP TABLE SE ESISTE in una stored procedure MySQL
Ho visto alcuni modi per fare la cosa della tabella temporanea. Fondamentalmente, puoi creare la tabella temporanea, lavorarci sopra e poi rilasciarla alla fine ... oppure lasciarla se esiste, crearla e poi lavorarci sopra.
Preferisco il secondo metodo in modo da iniziare sempre a pulire, ed è un controllo integrato dell'esistenza della tabella. Tuttavia, non riesco a farlo funzionare:
qui sono i miei esempi:
questo funziona:
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();
funziona:
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();
Questo non:
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();
Il primo 2 di lavoro, ma se questo tavolo esiste (come se la procedura non ha terminato o qualcosa del genere), che sarà ovviamente termina con un errore "tabella tblTest non esiste". L'esempio non funzionante è quello che sto cercando - rilascia la tabella se è lì e poi ricrearla in modo da poter iniziare a pulire.
Sembra che siano gli "IF EXISTS" a far fallire questa cosa. Ho copiato il codice da tutti i tipi di siti che fanno cose molto simili e in nessun caso posso ottenere un "DROP TABLE SE EXISTS ..." per funzionare. Mai.
Dev Server: mySQL versione server: 5.1.47-comunità Prod Server: mySQL Server versione: 5.0.45-log
Non possiamo cambiare db versioni (DBA non lo permettono), così Sono bloccato su quello che ho. Si tratta di un bug in mySQL o nella procedura?
Grazie.
Probabilmente avrei dovuto inviato l'errore effettivo che ottengo ... [Err] 1064 - Hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a '// DELIMITER; CALL pTest() 'alla riga 7 Semplicemente rimuovendo "IF EXISTS" si elimina l'errore e l'intero proc funziona (a meno che, ovviamente, la tabella non esista;) –