2011-08-08 5 views
1

私の現在のコードは次のとおりです。MySQLストアドプロシージャのPREPAREとEXECUTE後の結果の取得方法は?

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;'); 

に私のコードを変更しようとしたしかし、それは動作しませんでした。

助けてください。

SOLVED!

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

+0

なぜ、あなたのストアドプロシージャに 'SELECT COUNT(*)FROM train WHERE _car <= 0;'と書かなかったのですか? – Calmarius

答えて

2

として、あなたは、元の文の宣言で変数の割り当てを含める必要がありhere述べました。そして、あなたはあなたがそれを実行します

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

EXECUTE stmt1 using _car; 

とで結果が得られます。

select _a; 

それが動作するかどうか、私に教えてくださいだからあなたの文のようなものになるだろう。

+0

動作しませんでした:エラーコード:1064 SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文が7行目の '_car'の近くで使用するようにしてください – lostsheep

関連する問題