Mysql
 sql >> Database >  >> RDS >> Mysql

Come scrivere una funzione MySQL con il nome di una tabella dinamica?

Innanzitutto, come menzionato da @eggyal, questo non è il modo migliore per fare le cose. Ma può essere fatto utilizzando istruzioni preparate. Cioè

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;

Ovviamente puoi aggiungere nomi di campo ecc. Se necessario, o utilizzare SELECT o UPDATE ecc. Questo non è l'ideale, ma farà quello che stai cercando.

Ho dovuto usarlo in alcuni punti prima in cui viene eseguita la stessa manutenzione su più tabelle che hanno nomi di campo diversi ( / nomi di tabella ) e quindi invece di scrivere la stessa funzione 20 volte, utilizzo invece questo tipo di stored procedure che può quindi essere chiamato per eseguire l'indicizzazione ecc.

Come menzionato anche da @eggyal , mentre questo potrebbe fare come chiedi, potrebbe non fare come ti serve. Se puoi fornire maggiori informazioni, potresti ottenere una soluzione migliore.