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

Я должен преобразовать MSSQL сохраненный proc, который передает varchar это запрос:

INSERT INTO Results
  EXEC (@Expresion);

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

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

4 ответов


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


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

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;

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


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

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

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