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

Dynamiske tabelnavne i lagret procedurefunktion

Hvis du vil bygge en SQL-sætning ved hjælp af identifikatorer, skal du bruge forberedte sætninger; men forberedte udsagn kan ikke bruges i funktioner. Så du kan oprette en lagret procedure med OUT parameter -

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

Bruger eksempel -

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



  1. Sådan fungerer FROM_UNIXTIME() i MariaDB

  2. PSQLEundtagelse:ResultSet er ikke placeret korrekt, måske skal du ringe næste gang

  3. PostgreSQL - GROUP BY-klausul

  4. Valg af processor til SQL Server 2014 – Del 2