É possível executar uma string no MySQL?
-
14-09-2019 - |
Pergunta
Eu tenho que converter um proc armazenados MSSQL que passa um varchar
que é uma consulta:
INSERT INTO Results
EXEC (@Expresion);
Isto não está funcionando. Tenho certeza que EXEC
e EXECUTE
não são comandos do MySQL, mas CALL
não quer trabalhar.
Alguém sabe se é mesmo possível ter algo como função eval
de JavaScript para MySQL?
Solução
EXECUTAR é um comando válido no MySQL. MySQL manual de referência
Outras dicas
Eu acho que você está procurando algo parecido com isto:
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;
Este é o equivalente SQL de eval(my_string);
:
@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;
Basicamente eu combinei as respostas existentes, nem lhe diz como fazer eval exatamente.
Se você quiser adicionar parâmetros, você pode usar isto:
@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;
E para responder à pergunta original exatamente:
@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
EXECUTE myquery;
Note que a declaração PREPARE ... FROM
quer uma variável de sessão (prefixado com @
). Se você tentar passar uma variável normal, ele vai jogar suas mãos no ar e ele simplesmente não vai se importar.
O EXECUTE
MySQL comando só pode ser usado para um declaração preparada.
Se caso você queira executar várias consultas a partir da cadeia, considere salvá-los em arquivo e fonte-lo, por exemplo.
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;