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

ストアドプロシージャ関数の動的テーブル名

    識別子を使用してSQLステートメントをまとめる場合は、プリペアドステートメントを使用する必要があります。ただし、プリペアドステートメントは関数で使用できません。したがって、OUTパラメータを使用してストアドプロシージャを作成できます-

    CREATE PROCEDURE getName
     (IN tableName VARCHAR(50), IN myId INT(11), OUT myName VARCHAR(50))
    BEGIN
    
      SET @GetName =
        CONCAT('SELECT name INTO @var1 FROM ', tableName, ' WHERE id=', myId);
      PREPARE stmt FROM @GetName;
      EXECUTE stmt;
    
      SET myName = @var1;
    END
    

    例を使用して-

    SET @tableName = 'tbl';
    SET @myId = 1005;
    SET @name = NULL;
    CALL getName(@tableName, @myId, @name);
    SELECT @name;
    



    1. SQLで3つのテーブルを結合する

    2. シーケンスとトリガーを使用したOracleの自動インクリメントが正しく機能していません

    3. SQLServerのIsIntegerに最適

    4. dtexecを使用したSSISパッケージの実行