[MySQL] Statement in Tabelle

nerodrom

Grünschnabel
Hallo,

gibts ne Möglichkeit mit MySQL in einer Tabelle abgespeichertes SQL-Statement auszuführen?

Beispiel:

STATEMENT ([idStatement], [Befehl], [Beschreibung])

1 | select * from testA | Übersicht testA
2 | select * from testB | Übersicht testB

Ich denke mir, dass ich zuerst den Befehl holen muss - wie...

select Befehl from STATMENT where idStatement = 2; (testB)

Und nun?
 
Ich glaube, aus der Konsole wirds so schlecht gehen. Ich weiss es nicht genau. Schau doch mal, wie man nen Stream umbiegen kann mit MySQL Konsole. Ich könnte mir eventuell vorstellen, dass du vor Dein Bespiel ein "<<" setzen könntest.

Sehr interessante Idee - wenns geht möchte ich die Lösung gerne wissen. Ich denke aber, du wirst ne Scriptsprache nutzen müssen ....

Chris
 
Hi XChris,

ich hab erstmal die ineffizientere Variante gewählt.
Bin aber immer noch auf der Suche nach einer eleganten Lösung. Dadurch könnte ich etliche Abfragen einsparen. Falls ich etwas brauchbares anbieten kann, werde ich es posten.

Gruß nerodrom
 
Hi,

Wenn du ein Programmier- / Skriptsprache nutzt für deine Querys hast du es einfacher.
Den Methoden / Klassen kannst du den Query einfach übergeben, und die führen ihn dann aus.
Der SQL Server stellt auch Prozeduren zur Verfügung, die Querys auf diese Art ausführen können. Musst mal schauen, ob MySQL auch sowas zur verfügung stellt
 
@Niggo

Genau die Variante habe ich umgesetzt. Jedoch muss ich erst den Select-Befehl aus der DB holen, um ihn später auszuführen. Das kostet für meine Ansprüche zu viel Performance.

Kennst du zufälligerweise nen Link zu den Prozeduren vom SQL SERVER?

Gruß
/nerodrom
 
Die Prozedur funktioniert mit der oben beschriebenen STATMENT-Tabelle, indem ich einfach die idStatement übergebe. Leider habe ich das Ergebnis in einer Scriptsprache noch nicht testen können. In der MySQL Konsole scheint es zu funktionieren.

delimiter |
DROP PROCEDURE IF EXISTS executeSQL|
CREATE Procedure executeSQL (
IN id INTEGER
)
Begin
DECLARE EXIT HANDLER FOR SQLSTATE VALUE '23000' ROLLBACK;
DECLARE EXIT HANDLER FOR SQLSTATE VALUE '21000' BEGIN END;
START TRANSACTION;
SET @SqlCmd = (SELECT Befehl FROM Statement where idStatement = id);
PREPARE stmt FROM @SqlCmd;
EXECUTE stmt;
COMMIT;
END|
delimiter ;

Aufruf für testB:
CALL executeSQL(2);

/nerodrom
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück