3

MySQL でストアド プロシージャを作成しており、SQL クエリの結果を変数に割り当てる必要があります。問題は、SELECT ステートメントを作成するには、パラメーターを渡すため、CONCAT() 関数を使用する必要があることです。

CONCAT 関数内では変数を使用できないようです。どうすればこれを達成できるかについてのアイデアはありますか? 私が書こうとしている手順は以下のとおりです。

DELIMITER //
CREATE PROCEDURE `my_proc` (IN tbl VARCHAR(20), IN col VARCHAR(20), IN id INT)
  BEGIN
    DECLARE @myval VARCHAR(100);

    SET @t1 =CONCAT('SELECT ',col,' FROM ',tbl,' INTO @myval WHERE id = ',id );
    PREPARE stmt1 FROM @t1;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END //

これを実行すると、SQL 構文エラーが発生します。

4

1 に答える 1

3

問題は次の行です。

...
-- SET @t1 = CONCAT('SELECT ',col,' FROM ',tbl,' INTO @myval WHERE id = ',id );
SET @t1 = CONCAT('SELECT ', col, ' INTO @myval FROM ', tbl, ' WHERE id = ', id);
...

ドキュメントを確認してください: 13.2.9.1。SELECT ... INTO 構文.

これは、例を含むSQL Fiddleです。

9.4との違いを示すことが重要です。ユーザー定義変数(@t1 および @myval) および13.6.4.1。ローカル変数の構文 DECLARE (例: myval と t1) は異なる変数であるため、次のように宣言する必要はありません。

-- DECLARE @myval VARCHAR (100);
于 2013-11-14T06:39:10.087 に答える