sql >> Databáze >  >> RDS >> Mysql

Jak napsat funkci mysql s názvem dynamické tabulky?

Za prvé, jak zmínil @eggyal, toto není nejlepší způsob, jak věci řešit. Ale lze to provést pomocí připravených prohlášení. Tj.

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;

Můžete samozřejmě přidat názvy polí atd. podle potřeby nebo použít SELECT nebo UPDATE atd. Není to ideální, ale udělá to, co hledáte.

Musel jsem to použít na některých místech dříve, kde se stejná údržba provádí na více tabulkách, které mají různé názvy polí ( / názvy tabulek ), a tak místo toho, abych psal stejnou funkci 20krát, místo toho používám tento typ uložené procedury, která lze pak zavolat k provedení indexování atd.

Jak také zmínil @eggyal , i když to může dělat to, co požadujete, nemusí to dělat to, co potřebujete. Pokud můžete poskytnout více informací, můžete získat lepší řešení.



  1. Jak najít všechna porušení omezení v databázi SQL Server

  2. Zřetězit hodnoty na základě ID

  3. Import ze souborů a export do souborů pomocí příkazového řádku MySQL

  4. MySQL - Trvalé připojení vs sdružování připojení