Pregunta

Tengo para convertir un procedimiento almacenado MSSQL que pasa un varchar que es una consulta:

INSERT INTO Results
  EXEC (@Expresion);

Esto no está funcionando. Estoy bastante seguro de que EXEC y EXECUTE no son comandos de MySQL, pero CALL no funciona bien.

¿Alguien sabe si es aún posible tener algo así como la función de eval JavaScript para MySQL?

¿Fue útil?

Solución

EJECUTAR es un comando válido en MySQL. MySQL manual de referencia

Otros consejos

Creo que usted está buscando algo como esto:

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 es el equivalente de SQL eval(my_string);:

@Expression = 'SELECT "Hello, World!";';
PREPARE myquery FROM @Expression;
EXECUTE myquery;

Básicamente he combinado las respuestas existentes, ni le indica cómo hacer exactamente eval.


Si desea agregar parámetros, puede utilizar lo siguiente:

@username = "test";
@password = "asdf";
@Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;'
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;

Y para responder a la pregunta original con exactitud:

@Expression = 'SELECT "Hello, World!";'
PREPARE myquery FROM @Expression;
INSERT INTO Results
  EXECUTE myquery;

Tenga en cuenta que la declaración PREPARE ... FROM quiere una variable de sesión (con el prefijo @). Si intenta pasar una variable normal, se va a tirar sus manos en el aire y que no le importa.

El EXECUTE comando de MySQL sólo se puede utilizar para una declaración preparada.

Si el caso de que desee ejecutar varias consultas de la cadena, considere la posibilidad de guardarlos en un archivo de fuente y que, por ejemplo.

SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top