2010-08-06 26 views
5

Próbuję użyć następującej procedury przechowywanej.Co robię źle w tej przechowywanej procedury MySQL?

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` 
PROCEDURE `DeleteField`(IN _TABLENAME Text, IN _FIELDNAME text) 
BEGIN 
    if exists (select * from information_schema.Columns 
    where table_name = _TABLENAME and column_name = _FIELDNAME) 
    then 
    alter table _TABLENAME drop column _FIELDNAME; 
    end if; 
END 

Więc mów ('anytable', 'Anyfield') i pojawia się błąd Kod błędu: 1146Table'Database._tablename'doesn't istnieje Ten _tablename powinien być mój parametr, a nie ciąg .

Plz trochę pomocy, zanim się powiesić, kocham moje życie o wiele za dużo.

+1

Święty Piotr: "Jak umarłeś?" Skychaser: "Zapytanie MySQL ..." Św. Piotr: "Co masz?" – JYelton

Odpowiedz

5

Oczekuję, że będzie trzeba utworzyć dynamiczne zapytanie SQL, aby to zrobić.

Przykład jak to zrobić pod adresem:

http://www.java2s.com/Code/SQL/Procedure-Function/Createadynamicstatementinaprocedure.htm

To byłoby zastąpienie alter table, choć ja testowałem to.

DECLARE l_sql VARCHAR(4000); 
    SET l_sql=CONCAT_ws(' ', 
       'ALTER table ',_TABLENAME,' drop column ',_FIELDNAME); 
    SET @sql=l_sql; 
    PREPARE s1 FROM @sql; 
    EXECUTE s1; 
    DEALLOCATE PREPARE s1; 
+1

+1: Absolutnie poprawne. –

+0

Dziękuję James, uratowałeś mi życie i czuję, że jestem ci winien połowę ciastka lub coś takiego. Naprawdę, bardzo dziękuję. Nadal nie wiem, dlaczego muszę stosować dynamiczne procedury, ale mogę zapisać to zrozumienie na później, każdy link na ten temat byłby naprawdę doceniany. :) – Skychaser

Powiązane problemy