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

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

INSERT INTO Results
  EXEC (@Expresion);

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

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


person aarona    schedule 16.06.2009    source источник


Ответы (4)


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

person Brandon Bodnar    schedule 16.06.2009

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

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;
person Tengiz    schedule 30.10.2015
comment
Есть ли смысл в строке SET @asd = NULL;? Я не понимаю, что это делает. - person Jsilvermist; 09.02.2021

Это 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 нужна переменная сеанса (с префиксом @). Если вы попытаетесь передать обычную переменную, она поднимет руки вверх, и ей будет все равно.

person Luc    schedule 18.05.2016
comment
@Expression = 'SELECT "Hello, World!";'; у меня не работает. Я использую MySQL v5.6.30. - person kenorb; 02.08.2016
comment
@kenorb Странно, потому что я уверен, что это работало в последней версии mysql. Может ли это быть как-то связано с установкой другого разделителя? (Я мог бы сделать это, но забыл, что это повлияло на это.) - person Luc; 02.08.2016
comment
Возможно, SET нужно было раньше. - person kenorb; 02.08.2016
comment
+1 за рифму! он поднимет руки вверх, и ему будет все равно Код работает отлично! - person Rahul Chawla; 22.08.2017

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

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

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