是否可以在MySQL中执行字符串?

时间:2009-06-16 01:11:00

标签: mysql eval evaluation exec execute

我必须转换传递varchar查询的MSSQL存储过程:

INSERT INTO Results
  EXEC (@Expresion);

这不起作用。我很确定EXECEXECUTE不是MySQL命令,但CALL也不起作用。

有没有人知道是否甚至可以为MySQL提供类似JavaScript的eval函数?

4 个答案:

答案 0 :(得分:15)

我认为你正在寻找类似的东西:

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;

答案 1 :(得分:14)

EXECUTE是MySQL中的有效命令。 MySQL reference manual

答案 2 :(得分:10)

这是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语句需要会话变量(前缀为@)。如果你试图传递一个正常的变量,那么它就会在空中挥动,而它根本就不在乎。

答案 3 :(得分:0)

EXECUTE MySQL命令只能用于一个预准备语句。

如果您想要从字符串中执行多个查询,请考虑将它们保存到文件中并将其源化,例如

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