3

私の現在のコードは次のとおりです。

DELIMITER \\

CREATE PROCEDURE sample (IN _car VARCHAR(15))
    BEGIN
        DECLARE _a INTEGER;
        SET @s = CONCAT('SELECT COUNT(*) FROM train WHERE ', _car, '<=0;');
        PREPARE stmt1 FROM @s;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;

END\\

しかし、_a 変数に対する SELECT ステートメントの回答をキャプチャしたかったのです。

コードを次のように変更してみました

SET @s = CONCAT('SELECT COUNT(*) INTO', _a,' FROM train WHERE ', _car, '<=0;');

しかし、それはうまくいきませんでした。

助けてください?

解決しました!

DELIMITER \\

CREATE PROCEDURE sample (IN _car VARCHAR(15))
    BEGIN
        DECLARE _a INTEGER;
        SET @var = NULL;
        SET @s = CONCAT('SELECT COUNT(*) INTO @var FROM train WHERE ', _car, '<=0;');
        PREPARE stmt1 FROM @s;
        EXECUTE stmt1;
        SELECT @var;
        DEALLOCATE PREPARE stmt1;
END\\

:D

4

1 に答える 1

2

ここで述べたように、元のステートメント宣言に変数の割り当てを含める必要があります。したがって、ステートメントは次のようになります。

SELECT COUNT(*) FROM train WHERE ?<=0 INTO _a

次に、次のように実行します。

EXECUTE stmt1 using _car;

そして結果を得る:

select _a;

それが機能するかどうか教えてください。

于 2011-08-08T19:28:40.030 に答える