query immediate ejecutar mysql eval evaluation exec execute

immediate - mysql execute query



¿Es posible ejecutar una cadena en MySQL? (4)

Tengo que convertir un proceso almacenado de MSSQL que pasa una 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 tampoco funciona.

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


Creo que estás 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;



El comando EXECUTE MySQL solo se puede usar para una instrucción preparada.

En caso de que desee ejecutar varias consultas desde la cadena, considere guardarlas en un archivo y fuente, por ejemplo

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


Este es el equivalente en SQL de eval(my_string); :

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

Básicamente, combiné las respuestas existentes, ninguna de las dos le dice cómo hacer una evaluación exactamente.

Si desea agregar parámetros, puede usar esto:

@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 exactamente a la pregunta original:

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

Tenga en cuenta que la instrucción PREPARE ... FROM desea una variable de sesión (con el prefijo @ ). Si intentas pasar una variable normal, lanzará sus manos en el aire y simplemente no le importará.