2009-06-16 14 views
18

Ich habe eine MSSQL gespeicherte Prozedur zu konvertieren, die eine varchar gibt, dass eine Abfrage ist:Ist es möglich, eine Zeichenfolge in MySQL auszuführen?

INSERT INTO Results 
    EXEC (@Expresion); 

Dies funktioniert nicht. Ich bin mir ziemlich sicher, dass EXEC und keine MySQL-Befehle sind, aber CALL funktioniert auch nicht.

Weiß jemand, ob es sogar möglich ist, etwas wie JavaScript eval Funktion für MySQL zu haben?

Antwort

13

Ich glaube, du bist für so etwas suchen:

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; 
+1

Was ist @ ads in Ihrem letzten Befehl? –

6

Dies ist das SQL-Äquivalent von eval(my_string);:

@Expression = 'SELECT "Hello, World!";'; 
PREPARE myquery FROM @Expression; 
EXECUTE myquery; 

Im Grunde habe ich die vorhandenen Antworten kombiniert, weder sagt Ihnen, wie man eval genau macht.


Wenn Sie Parameter hinzufügen möchten, können Sie diese verwenden:

@username = "test"; 
@password = "asdf"; 
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;' 
PREPARE myquery FROM @Expression; 
EXECUTE myquery USING @username, @password; 

Und die ursprüngliche Frage zu beantworten, genau:

@Expression = 'SELECT "Hello, World!";' 
PREPARE myquery FROM @Expression; 
INSERT INTO Results 
    EXECUTE myquery; 

Beachten Sie, dass die PREPARE ... FROM Anweisung eine Session-Variable will (vorangestellt mit @). Wenn Sie versuchen, eine normale Variable zu übergeben, wird es seine Hände in die Luft werfen, und es ist einfach egal.

+0

'@Expression = 'SELECT" Hallo, Welt! ";"; "Funktioniert nicht für mich. Ich benutze MySQL v5.6.30. – kenorb

+0

@kenorb Seltsam, da ich mir sicher bin, dass dies auf einer aktuellen MySQL-Version funktioniert hat. Könnte es etwas mit dem Setzen eines anderen Trennzeichens zu tun haben? (Ich hätte das vielleicht tun können, aber vergessen, dass es das beeinflusst hat.) – Luc

+3

Vielleicht ist 'SET' vorher nötig. – kenorb

1

Der MySQL-Befehlkann nur für eine vorbereitete Anweisung verwendet werden.

Falls Sie mehrere Abfragen aus der Zeichenfolge ausführen möchten, sollten Sie sie in einer Datei speichern und sie z.

SET @query = 'SELECT 1; SELECT 2; SELECT 3;'; 
SELECT @query INTO OUTFILE '/tmp/temp.sql'; 
SOURCE /tmp/temp.sql;