Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak napisać funkcję mysql z dynamiczną nazwą tabeli?

Po pierwsze, jak wspomniał @eggyal, nie jest to najlepszy sposób na zajmowanie się rzeczami. Ale można to zrobić za pomocą przygotowanych oświadczeń. To znaczy

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;

Możesz oczywiście dodać nazwy pól itp. w razie potrzeby lub użyć SELECT lub UPDATE itp. To nie jest idealne, ale zrobi to, czego szukasz.

Musiałem tego użyć w niektórych miejscach wcześniej, w których ta sama konserwacja jest wykonywana na wielu tabelach, które mają różne nazwy pól ( / nazwy tabel ), więc zamiast pisać tę samą funkcję 20 razy, zamiast tego używam tego typu procedury składowanej, która można go następnie wywołać w celu wykonania indeksowania itp.

Jak również wspomniał @eggyal , chociaż może to zrobić to, o co prosisz, może nie działać tak, jak potrzebujesz. Jeśli możesz podać więcej informacji, możesz uzyskać lepsze rozwiązanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zaimplementuj zapytanie LIKE w PDO

  2. phpMyAdmin zgłasza #2002 nie można zalogować się do serwera mysql phpmyadmin

  3. MySQL — funkcja FOUND_ROWS() dla całkowitej liczby wierszy, których dotyczy problem

  4. Jak podłączyć mysql workbench do uruchamiania mysql w dockerze?

  5. Operator logiczny AND w mySql REGEXP?