Question

Je dois convertir un MSSQL proc stocké qui passe un varchar qui est une requête:

INSERT INTO Results
  EXEC (@Expresion);

Ce ne fonctionne pas. Je suis assez sûr que EXEC et EXECUTE ne sont pas des commandes MySQL, mais CALL ne fonctionne pas non plus.

Est-ce que quelqu'un sait s'il est même possible d'avoir quelque chose comme la fonction eval de JavaScript pour MySQL?

Était-ce utile?

La solution

Execute est une commande valide dans MySQL. Manuel de référence MySQL

Autres conseils

Je pense que vous cherchez quelque chose comme ceci:

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;

Ceci est l'équivalent SQL de eval(my_string);:

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

En fait, je combiné les réponses existantes, ni vous explique comment faire exactement eval.


Si vous voulez ajouter des paramètres, vous pouvez utiliser ceci:

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

Et pour répondre exactement à la question initiale:

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

Notez que l'instruction PREPARE ... FROM veut une variable de session (préfixés par @). Si vous essayez de passer une variable normale, il va jeter ses mains en l'air et juste ne se souciera pas.

Le EXECUTE commande MySQL ne peut être utilisé pour une préparée.

Si le cas que vous voulez exécuter plusieurs requêtes de la chaîne, envisagez de les enregistrer dans le fichier source et il, par exemple.

SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top