2009-06-16 24 views
18

que tiene que convertir un procedimiento almacenado MSSQL que pasa un varchar que es una consulta:¿Es posible ejecutar una cadena en MySQL?

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 de JavaScript eval para MySQL?

Respuesta

13

pienso 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; 
+1

¿Qué es '@ ads' en su último comando? –

6

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

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

Básicamente combinado las respuestas existentes, ni te dice cómo hacer eval exactamente.


Si desea añadir parámetros, puede utilizar 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 a la pregunta original exactamente:

@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 tratas de pasar una variable normal, levantará sus manos en el aire y simplemente no le importará.

+0

'@Expression = 'SELECCIONAR' Hola, Mundo! ';';' No funciona para mí. Estoy usando MySQL v5.6.30. – kenorb

+0

@kenorb Extraño porque estoy seguro de que esto funcionó en una versión mysql reciente. ¿Podría tener algo que ver con establecer un delimitador diferente? (Pude haberlo hecho, pero olvidé que esto afectó). – Luc

+3

Quizás 'SET' sea necesario antes. – kenorb

1

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

Si desea ejecutar varias consultas desde la cadena, considere guardarlas en un archivo y generarlas, p. Ej.

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