3

select から取得した値をプロシージャでさらに使用して実行したいのですが、その方法がわかりません。

テストとして、私は次のように書きましたが、v_1、v_2、または v_3 変数は、期待どおりに値 1,2 & 3 をとらないため、さらなるロジックに使用できません...

DROP PROCEDURE IF EXISTS MPT_testing; DELIMITER //  CREATE PROCEDURE MPT_testing() READS SQL DATA BEGIN

  DECLARE v_1 INT;   DECLARE v_2 INT;   DECLARE v_3 INT;
     SET @sql=CONCAT('SELECT 1,2 into v_1, v_2');   PREPARE s1 FROM @sql;   EXECUTE s1;   DEALLOCATE PREPARE s1;

  SET v_3 = v_1 + v_2;

  SELECT v_3;

END //

DELIMITER ;

誰かここで助けてくれませんか?

ありがとう、レオ

4

3 に答える 3

5

「SELECT 1,2 into v_1, v_2」を

'SELECT @v_1:=1, @v_2:=2'

または、変数を参照するときは常に @ を使用してください。詳細については、このスレッドを参照してください: MySQL DECLARE の SELECT INTO 変数により構文エラーが発生しますか?

于 2012-11-12T21:16:37.133 に答える
2

プロシージャ内で動的 SQL が必要ない場合は、構文を単純化できます。

DECLARE v_1 INT;   DECLARE v_2 INT;   DECLARE v_3 INT;

SELECT 1,2 into v_1, v_2;
SET v_3 = v_1 + v_2;
SELECT v_3;

ストアド プロシージャ内で宣言された通常の変数を使用すると、別のストアド プロシージャを呼び出すとユーザー定義変数の値が変更される可能性があるため、ユーザー定義変数 (@ 変数) よりも安全です。

于 2012-11-12T21:41:31.250 に答える
0

適切に動作するように少しコードを変更する必要があります。私の変更を参照してください。

DECLARE v_1 INT;
DECLARE v_2 INT;
DECLARE v_3 INT;

SET @sql=CONCAT('SELECT 1,2 into @v1, @v2');
PREPARE s1 FROM @sql;
EXECUTE s1;

SELECT @v1, @v2 INTO v_1, v_2;
SET v_3 = v_1 + v_2;
SELECT v_3;

DEALLOCATE PREPARE s1;
于 2016-12-30T04:43:49.127 に答える