Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como escrever uma função mysql com nome de tabela dinâmica?


Primeiro, como mencionado por @eggyal, esta não é a melhor maneira de fazer as coisas. Mas isso pode ser feito usando declarações preparadas. Ou seja
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;

É claro que você pode adicionar nomes de campo etc. conforme necessário, ou usar um SELECT ou UPDATE etc. Isso não é o ideal, mas fará o que você está procurando.

Eu tive que usar isso em alguns lugares antes onde a mesma manutenção está sendo executada em várias tabelas que têm nomes de campo diferentes ( / nomes de tabela ) e, portanto, em vez de escrever a mesma função 20 vezes, uso esse tipo de procedimento armazenado que pode então ser chamado para fazer a indexação etc.

Como também mencionado por @eggyal , embora isso possa fazer o que você pede, pode não fazer o que você precisa. Se você puder fornecer mais informações, poderá obter uma solução melhor.