Возможно ли выполнить строку в MySQL?
-
14-09-2019 - |
Вопрос
Я должен преобразовать хранимый в MSSQL процесс, который передает varchar
это запрос:
INSERT INTO Results
EXEC (@Expresion);
Это не работает.Я почти уверен, что EXEC
и EXECUTE
не являются командами MySQL, но CALL
тоже не работает.
Кто-нибудь знает, возможно ли вообще иметь что-то вроде JavaScript eval
функция для MySQL?
Решение
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;
В основном я объединил существующие ответы, ни один из них не говорит вам, как точно выполнить оценку.
Если вы хотите добавить параметры, вы можете использовать это:
@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;