sql >> Database >  >> RDS >> Mysql

Hoe schrijf je een mysql-functie met dynamische tabelnaam?

Ten eerste, zoals vermeld door @eggyal, is dit niet de beste manier om dingen aan te pakken. Maar het kan worden gedaan door voorbereide verklaringen te gebruiken. D.w.z.

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;

Je kunt natuurlijk veldnamen etc. toevoegen als dat nodig is, of een SELECT of UPDATE gebruiken etc. Dit is niet ideaal, maar zal doen wat je zoekt.

Ik heb dit op sommige plaatsen eerder moeten gebruiken waar hetzelfde onderhoud wordt uitgevoerd op meerdere tabellen met verschillende veldnamen (/tabelnamen) en dus in plaats van dezelfde functie 20 keer te schrijven, gebruik ik in plaats daarvan dit type opgeslagen procedure die kan dan worden aangeroepen om de indexering enz. te doen.

Zoals ook vermeld door @eggyal , hoewel dit misschien doet wat je vraagt, doet het misschien niet wat je nodig hebt. Als je meer informatie kunt geven, krijg je misschien een betere oplossing.



  1. Hoe Acosh() werkt in PostgreSQL

  2. MySQL:SUM() met JOIN retourneert onjuiste waarden

  3. Een PHP-script aanroepen vanuit een MySQL-trigger

  4. Hiaten in mysql-tabelrij-ID repareren nadat we er enkele hebben verwijderd