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

Hvordan skriver man en mysql-funktion med dynamisk tabelnavn?

Først som nævnt af @eggyal er dette ikke den bedste måde at gøre tingene på. Men det kan gøres ved at bruge udarbejdede udsagn. Dvs.

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;

Du kan selvfølgelig tilføje feltnavne osv. efter behov, eller bruge en SELECT eller UPDATE osv. Dette er ikke ideelt, men vil gøre det du leder efter.

Jeg har været nødt til at bruge dette nogle steder før, hvor den samme vedligeholdelse bliver udført på flere tabeller, som har forskellige feltnavne (/tabelnavne), og så i stedet for at skrive den samme funktion 20 gange, bruger jeg i stedet denne type lagret procedure, som kan derefter kaldes til at foretage indeksering osv.

Som også nævnt af @eggyal , selvom dette kan gøre som du beder om, gør det måske ikke som du har brug for. Hvis du kan give flere oplysninger, kan du få en bedre løsning.



  1. SQL Server-ydelse TOP IO-forespørgsel -2

  2. vært 'localhost' har ikke tilladelse til at oprette forbindelse til denne MySQL-server (#1130)

  3. Lagring af kreditkortnumre i SESSION - måder omkring det?

  4. SQLAlchemy-fejl MySQL-serveren er forsvundet