Je dois convertir un proc stocké MSSQL qui passe une varchar
qui est une requête:
INSERT INTO Results
EXEC (@Expresion);
Ça ne marche pas. Je suis à peu près 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?
EXECUTE est une commande valide dans MySQL. Manuel de référence MySQL
Je pense que vous cherchez quelque chose comme ça:
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;
Fondamentalement, j'ai combiné les réponses existantes, sans que je ne vous dise comment faire eval exactement.
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
demande une variable de session (préfixée par @
). Si vous essayez de passer une variable normale, elle lèvera les mains en l'air et ne s'en souciera tout simplement pas.
La commande EXECUTE
MySQL ne peut être utilisée que pour une instruction préparée.
Si vous souhaitez exécuter plusieurs requêtes à partir de la chaîne, envisagez de les enregistrer dans un fichier et de les rechercher, par exemple.
SET @query = 'SELECT 1; SELECT 2; SELECT 3;';
SELECT @query INTO OUTFILE '/tmp/temp.sql';
SOURCE /tmp/temp.sql;