Heim >Datenbank >MySQL-Tutorial >Wie kann ich dynamische SQL-Abfragen in MySQL ausführen, ohne EXEC oder EXECUTE zu verwenden?

Wie kann ich dynamische SQL-Abfragen in MySQL ausführen, ohne EXEC oder EXECUTE zu verwenden?

DDD
DDDOriginal
2024-12-17 01:45:25131Durchsuche

How Can I Execute Dynamic SQL Queries in MySQL Without Using EXEC or EXECUTE?

Strings in MySQL ausführen

Eine der häufigsten Aufgaben in der Programmierung ist die Fähigkeit, SQL-Abfragen dynamisch zu generieren und auszuführen. In MySQL ist diese Funktionalität nicht so einfach wie in einigen anderen Sprachen wie SQL Server, das für diesen Zweck den EXEC-Befehl bereitstellt.

Problem:

Ein Benutzer möchte um eine gespeicherte Prozedur in MSSQL zu konvertieren, die ein Varchar als Abfrage verwendet. Allerdings werden EXEC und EXECUTE in MySQL nicht unterstützt und CALL funktioniert ebenfalls nicht.

Lösung:

Während MySQL kein exaktes Äquivalent der Eval-Funktion von JavaScript hat gibt es eine Problemumgehung mithilfe einer Kombination aus dynamischem SQL und gespeicherten Prozeduren. So kann dies erreicht werden:

  1. Bereiten Sie die dynamische Abfrage vor: Verwenden Sie eine abgeleitete Tabelle, um die einzufügenden Werte zu verketten, was zu einer einzelnen Zeichenfolge führt, die die SQL-Abfrage enthält.
  2. Vorbereitete Anweisung erstellen: Weisen Sie die dynamische Abfrage mithilfe von PREPARE einer vorbereiteten Anweisungsvariablen zu Anweisung.
  3. Vorbereitete Anweisung ausführen: Führt die vorbereitete Anweisung mit der EXECUTE-Anweisung aus.
  4. Zuweisung der vorbereiteten Anweisung aufheben: Nach dem Ausführen der Abfrage Geben Sie die vorbereitete Anweisungsvariable mit DEALLOCATE PREPARE frei Anweisung.

Beispiel:

Der folgende Codeausschnitt veranschaulicht die Lösung:

SET @queryString = (
SELECT CONCAT('INSERT INTO user_group (`group_id`,`user_id`) VALUES ', www.vals) as res FROM (
    SELECT GROUP_CONCAT(qwe.asd SEPARATOR ',') as vals FROM ( 
           SELECT CONCAT('(59,', user_id, ')') as asd FROM access WHERE residency = 9 
    ) as qwe 
) as www
);

PREPARE stmt FROM @queryString;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; 
SET @asd = NULL;

Das obige ist der detaillierte Inhalt vonWie kann ich dynamische SQL-Abfragen in MySQL ausführen, ohne EXEC oder EXECUTE zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn