ホームページ > データベース > mysql チュートリアル > EXEC または EXECUTE を使用せずに MySQL で動的 SQL クエリを実行するにはどうすればよいですか?

EXEC または EXECUTE を使用せずに MySQL で動的 SQL クエリを実行するにはどうすればよいですか?

DDD
リリース: 2024-12-17 01:45:25
オリジナル
134 人が閲覧しました

How Can I Execute Dynamic SQL Queries in MySQL Without Using EXEC or EXECUTE?

MySQL での文字列の実行

プログラミングにおける一般的なタスクの 1 つは、SQL クエリを動的に生成して実行する機能です。 MySQL では、この機能は、この目的のための EXEC コマンドを提供する SQL Server などの他の言語ほど単純ではありません。

問題:

ユーザーは次のことを望んでいます。 varchar をクエリとして使用する MSSQL のストアド プロシージャを変換します。ただし、EXEC と EXECUTE は MySQL ではサポートされておらず、CALL も機能しません。

解決策:

MySQL には JavaScript の eval 関数とまったく同等の関数がありません。 、動的 SQL とストアド プロシージャを組み合わせて使用​​する回避策があります。これを実現する方法は次のとおりです。

  1. 動的クエリの準備: 派生テーブルを使用して、挿入する値を連結し、SQL クエリを含む単一の文字列を生成します。
  2. プリペアド ステートメントの作成: プリペアド ステートメントに動的クエリを割り当てます。 PREPARE ステートメントを使用して変数を変更します。
  3. プリペアド ステートメントの実行: EXECUTE ステートメントを使用してプリペアド ステートメントを実行します。
  4. プリペアド ステートメントの割り当てを解除: 後クエリの実行時に、DEALLOCATE PREPARE を使用して準備されたステートメント変数の割り当てを解除します。ステートメント。

例:

次のコード スニペットは、解決策を示しています:

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;
ログイン後にコピー

以上がEXEC または EXECUTE を使用せずに MySQL で動的 SQL クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート