web-dev-qa-db-ja.com

MySQLで文字列を実行することは可能ですか?

クエリであるvarcharを渡すMSSQLストアドプロシージャを変換する必要があります。

INSERT INTO Results
  EXEC (@Expresion);

これは機能していません。 EXECEXECUTEはMySQLコマンドではないと確信していますが、CALLも機能しません。

MySQLのJavaScriptのeval関数のようなものを持つことが可能かどうか誰かが知っていますか?

24
aarona

EXECUTEはMySQLで有効なコマンドです。 MySQLリファレンスマニュアル

16
Brandon Bodnar

私はあなたがこのようなものを探していると思います:

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;
16
Tengiz

これはeval(my_string);に相当するSQLです。

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

基本的に私は既存の答えを組み合わせました、どちらもevalを正確に行う方法を教えていません。


パラメータを追加したい場合は、これを使用できます。

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

そして元の質問に正確に答えるには:

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

PREPARE ... FROMステートメントにはセッション変数(接頭辞@)が必要であることに注意してください。通常の変数を渡そうとすると、空中に手を上げて気になりません。

11
Luc

EXECUTE MySQLコマンドは、準備された1つのステートメントに対してのみ使用できます。

文字列から複数のクエリを実行する場合は、それらをファイルに保存してソースすることを検討してください。

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