1

テーブル名として変数を使用しているストアドプロシージャを作成しており、出力パラメータでクエリの結果を取得しています

以下はストアドプロシージャです`

DELIMITER //
CREATE  PROCEDURE db_test.test(IN tblname varchar(100),OUT Valv varchar(100))
BEGIN
SET @a = CONCAT('SELECT name INTO  Valv FROM ', tbname ,' limit 1') ;
PREPARE stmt1 FROM @a;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END;
//
DELIMITER ;

以下のコマンドを使用して上記の手順を呼び出すと

CALL db_test.test('db_test.t_names',@name);
select @name;

PROCEDURE db_test.test は指定されたコンテキストで結果セットを返すことができないため、エラーが発生します

このエラーの解決策を検索しましたが、見つかりませんでした。上記のクエリの解決策を提案してください。

4

2 に答える 2

3

準備済みステートメントでユーザー変数を使用する必要があります。バグ レポートは既に存在します。

DELIMITER //
CREATE  PROCEDURE db_test.test(IN tblname varchar(100),OUT Valv varchar(100))
BEGIN
SET @a = CONCAT('SELECT name INTO @Valv FROM ', tbname ,' limit 1') ;
PREPARE stmt1 FROM @a;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET Valv = @Valv;
END;
//
DELIMITER ;
于 2013-06-24T09:44:52.620 に答える
0

これを試して

DELIMITER //
CREATE  PROCEDURE db_test.test(IN tblname varchar(100),OUT Valv varchar(100))
BEGIN
SET @a = CONCAT('SELECT name INTO  ', Valv ,' FROM ', tbname ,' limit 1') ;
PREPARE stmt1 FROM @a;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END;
//
DELIMITER ;
于 2013-06-24T06:11:25.343 に答える