2009-06-16 12 views
18

devo convertire una stored proc MSSQL che passa un varchar che è una query:È possibile eseguire una stringa in MySQL?

INSERT INTO Results 
    EXEC (@Expresion); 

Questo non funziona. Sono abbastanza sicuro che EXEC e EXECUTE non sono comandi MySQL, ma anche CALL non funziona.

Qualcuno sa se è anche possibile avere qualcosa come la funzione eval di JavaScript per MySQL?

risposta

13

Penso che tu sia alla ricerca di qualcosa di simile:

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

Che cosa è '@ ads' nel tuo ultimo comando? –

6

Questo è l'equivalente SQL di eval(my_string);:

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

Fondamentalmente ho combinato le risposte esistenti, né si dice come fare esattamente eval.


Se si desidera aggiungere i parametri, è possibile utilizzare questo:

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

E per rispondere alla domanda iniziale esattamente:

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

Nota che la dichiarazione PREPARE ... FROM vuole una variabile di sessione (con prefisso @). Se cerchi di passare una variabile normale, solleverà le mani in aria e non gli interesserà.

+0

'@Expression = 'SELECT" Hello, World! ";';' Non funziona per me. Sto usando MySQL v5.6.30. – kenorb

+0

@kenorb Strano perché sono sicuro che questo ha funzionato su una versione recente di mysql. Potrebbe avere qualcosa a che fare con l'impostazione di un delimitatore diverso? (Avrei potuto farlo ma ho dimenticato che questo ha influito su questo.) – Luc

+3

Forse 'SET' è necessario prima. – kenorb

1

Il comando EXECUTE MySQL può essere utilizzato solo per una istruzione preparata.

Se si desidera eseguire più query dalla stringa, prendere in considerazione il salvataggio in file e l'origine, ad es.

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