sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo escribir una función mysql con nombre de tabla dinámica?

En primer lugar, como lo mencionó @eggyal, esta no es la mejor manera de hacer las cosas. Pero se puede hacer usando declaraciones preparadas. Es decir,

DROP PROCEDURE IF EXISTS `exampleOfPrepareStatement`;

CREATE DEFINER = `user`@`%` PROCEDURE `exampleOfPrepareStatement`(inTableName VARCHAR(100))
    MODIFIES SQL DATA
    SQL SECURITY INVOKER
BEGIN

    SET @hr1 = CONCAT('
        INSERT INTO `',inTableName,'` (
            -- fields (can use parameters same as table name if needed)
        )
        -- either VALUES () or SELECT here
    ');

    -- Prepare, execute, deallocate
    PREPARE hrStmt1 FROM @hr1;
    EXECUTE hrStmt1;
    DEALLOCATE PREPARE hrStmt1;

END;

Por supuesto, puede agregar nombres de campo, etc. según sea necesario, o usar SELECCIONAR o ACTUALIZAR, etc. Esto no es ideal, pero hará lo que está buscando.

Tuve que usar esto en algunos lugares antes donde se realiza el mismo mantenimiento en varias tablas que tienen diferentes nombres de campo (/nombres de tabla) y, en lugar de escribir la misma función 20 veces, uso este tipo de procedimiento almacenado que luego se puede llamar para hacer la indexación, etc.

Como también lo mencionó @eggyal, si bien esto puede hacer lo que pide, es posible que no lo haga como lo necesita. Si puede proporcionar más información, entonces puede obtener una mejor solución.