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?

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top