Dynamische Tabellennamen in gespeicherten Prozedurfunktionen
Problemstellung:
Das Ziel ist Erstellen Sie eine gespeicherte Prozedurfunktion, die einen Wert aus einer Tabelle abruft, wobei der Tabellenname dynamisch als Parameter bereitgestellt wird. Versuche, die SQL-Anweisung innerhalb der Funktion dynamisch zu generieren, führen jedoch zu der Fehlermeldung „Dynamisches SQL ist nicht zulässig...“. Die Anforderung besteht darin, eine Methode zu finden, um diese Einschränkung zu überwinden und das gewünschte Ergebnis zu erzielen.
Lösung:
Während dynamisches SQL in gespeicherten Prozedurfunktionen nicht zulässig ist, ist dies der Fall Es ist möglich, vorbereitete Anweisungen zu verwenden, um SQL-Anweisungen dynamisch zu erstellen und auszuführen. Leider können vorbereitete Anweisungen nicht direkt in Funktionen verwendet werden.
Ein alternativer Ansatz besteht darin, eine gespeicherte Prozedur mit einem OUT-Parameter zu erstellen:
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>
Diese Prozedur akzeptiert die Eingabeparameter tableName und myId und Setzt den myName OUT-Parameter auf den abgerufenen Wert. Die Prozedur erstellt die SQL-Anweisung dynamisch und verwendet eine vorbereitete Anweisung zur Ausführung.
Um diese Prozedur zu verwenden, befolgen Sie diese Schritte:
SET @tableName = 'tbl'; SET @myId = 1005; SET @name = NULL; CALL getName(@tableName, @myId, @name); SELECT @name;
Diese Lösung ermöglicht das dynamische Abrufen von Werten aus verschiedenen Tabellen innerhalb einer gespeicherten Prozedur.
Das obige ist der detaillierte Inhalt vonWie rufe ich Daten aus dynamisch angegebenen Tabellen in gespeicherten Prozeduren ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!