2010-08-06 9 views
5

Estoy tratando de usar el siguiente procedimiento almacenado.¿Qué estoy haciendo mal en este procedimiento almacenado de 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 

por lo que la llamada ('anytable', 'Anyfield') y me sale el error Código de error: 1146Table'Database._tablename'doesn't existe Este _tablename debería ser mi parámetro, no es una cadena .

Mucho ayuda antes de ahorcarme, me encanta mi vida demasiado.

+1

St. Peter: "¿Cómo murieron?" Skychaser: "Consulta de MySQL ..." San Pedro: "¿Tu qué?" – JYelton

Respuesta

5

Espero que necesite crear una consulta SQL dinámica para hacer esto.

Un ejemplo de cómo hacer esto es en:

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

Este sería el reemplazo de modificación de tabla, aunque he probado esto.

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: Absolutamente correcto. –

+0

Gracias James, me salvaste la vida y siento que te debo la mitad de una galleta o algo así. Realmente, muchas gracias amigo. Todavía no sé por qué tengo que usar procedimientos dinámicos, pero puedo guardar este entendimiento para más adelante, sin embargo, cualquier enlace que sea realmente apreciado. :) – Skychaser

Cuestiones relacionadas