Возможно ли выполнить строку в MySQL?

20

Мне нужно преобразовать хранимую процедуру MSSQL, которая передает varchar , которая является запросом:

INSERT INTO Results
  EXEC (@Expresion);

Это не работает. Я уверен, что EXEC и EXECUTE не являются командами MySQL, но CALL тоже не работает.

Кто-нибудь знает, возможно ли иметь что-то вроде функции JavaScript eval для MySQL?

    
задан DJTripleThreat 16.06.2009 в 03:11
источник

4 ответа

13

EXECUTE является допустимой командой в MySQL. Справочное руководство по MySQL

    
ответ дан Brandon Bodnar 16.06.2009 в 03:15
источник
13

Я думаю, что вы ищете что-то вроде этого:

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;
    
ответ дан Tengiz 30.10.2015 в 19:01
источник
  • Что такое @ads в вашей последней команде? –  Nam G VU 17.01.2017 в 08:47
7

Это эквивалент SQL eval(my_string); :

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

В основном я объединил существующие ответы, и не сказал вам, как делать eval.

Если вы хотите добавить параметры, вы можете использовать это:

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

И чтобы ответить на исходный вопрос:

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

Обратите внимание, что для оператора PREPARE ... FROM требуется переменная сеанса (с префиксом @ ). Если вы попытаетесь передать нормальную переменную, она поднимет руки вверх, и ей все равно.

    
ответ дан Luc 18.05.2016 в 11:08
источник
  • @Expression = 'SELECT "Hello, World!";'; не работает для меня. Я использую MySQL v5.6.30. –  kenorb 02.08.2016 в 12:42
  • @kenorb Странно, потому что я уверен, что это работало в последней версии mysql. Может ли это иметь какое-то отношение к настройке другого разделителя? (Я мог бы это сделать, но забыл, что это повлияло на это.) –  Luc 02.08.2016 в 13:08
  • Возможно, SET необходим раньше. –  kenorb 02.08.2016 в 13:11
  • +1 для рифмы! он бросит свои руки в воздух, и ему будет все равно, что Code работает отлично! –  Rahul Chawla 21.08.2017 в 23:19
2

EXECUTE Команда MySQL может использоваться только для одного подготовленного оператора.

Если вы хотите выполнить несколько запросов из строки, подумайте о сохранении их в файле и отправьте его, например.

SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;
    
ответ дан kenorb 02.08.2016 в 13:03
источник