Est-il possible d'exécuter une chaîne dans MySQL?
-
14-09-2019 - |
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?
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;