sql >> データベース >  >> RDS >> Mysql

動的テーブル名を使用してmysql関数を作成するにはどうすればよいですか?

    @eggyalが述べたように、最初にこれは物事を進めるための最良の方法ではありません。ただし、プリペアドステートメントを使用して実行できます。つまり

    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;
    

    もちろん、必要に応じてフィールド名などを追加したり、SELECTやUPDATEなどを使用したりすることもできます。これは理想的ではありませんが、探していることを実行できます。

    フィールド名(/テーブル名)が異なる複数のテーブルで同じメンテナンスを行う前に、これを使用する必要があったため、同じ関数を20回記述する代わりに、このタイプのストアドプロシージャを使用します。その後、インデックス作成などを行うために呼び出すことができます。

    @eggyalでも言及されているように、これはあなたが求めるように機能するかもしれませんが、必要に応じて機能しない可能性があります。より多くの情報を提供できれば、より良い解決策が得られるかもしれません。



    1. PostgreSQL用のAmazonRDSおよびAuroraオファリングの概要

    2. RDBMSとNoSQL

    3. 構文エラー:'区切り文字'はここに有効な入力ではありません

    4. PostgreSQLレプリケーション101のフェイルオーバー