2012-01-10 11 views
3

これは非常に基本的なMySQLの質問ですが、私は答えを見つけることができませんでした。次のストアドプロシージャー本体を仮定します。MySQLストアドプロシージャリターン​​セレクト

DECLARE Existing INT DEFAULT 0; 
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1; 
SELECT FOUND_ROWS() INTO Existing; 
Select Existing; 

私はそれを実行すると常に最初のSELECT結果を返します。しかし、私はそれが最後の(SELECT Existing)結果を返すと期待しています。この動作は正常ですか?もしそうなら、どのように私はそれを変更することができます。なぜなら最初の選択はチェックのためだけであり、最後のものは私が必要とするものです。

(実際のロジックは、この異なっている、私はちょうどそれをここに簡素化)

答えて

3

あなたが代わりにこのような何かを行うことができます:idが発見された場合

SELECT COALESCE(id/id, 0) AS Existing 
    FROM users 
    WHERE id = pid 
    LIMIT 1; 

を、あなたは(1を返しますid/id = 1)。 idが見つからない場合は、0(ID/IDはNULL、COALESCEは0を返します)を返します。

0

あなたは問題がストアドプロシージャを実行するために使用しているMySQLの「クライアント」であることから

CREATE PROCEDURE my_proc() BEGIN 

CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100)); 
INSERT INTO TmpTable SELECT tblid, tblfield FROM Table1; 

SELECT * FROM TEMPORARY; 
+0

okですが、一時テーブル内の要素数を確認するにはどうすればよいですか?私がどこかでselectを実行すると、それを返して残りを無視します –

+0

@paulsimmons私が信じている変数に選択していない場合 –

1

を選択し、それを埋める、テーブル変数を作成することができます。ストアドプロシージャはすべてのクエリの結果セットを返しますが、クライアントはそれをサポートする必要があります。 phpMyAdminや他の同様のクライアントでクエリを実行していますか?コマンドプロンプトでデフォルトのクライアントを使用してストアドプロシージャを呼び出すと、すべてのクエリの結果が返されることがわかります。最後のパラ文字on this pageをお読みください。

これはいくつかの参考になりました。今すぐプロシージャから値を返す方法に来てください。これは、プロシージャからコール元に値を戻すために使用されるOUTパラメータを使用して実行できます。 this page on the MySQL websiteについて詳しくは、このページの例で説明しています。

希望すると便利です。ただ、デバッグ用

+0

私はノードでmysqlモジュールを使用しています。接続パラメータのmultipleStatements:true * SPのすべての操作で、結果が返されます(必ずしも行セットとは限りません)。 –

0

、2は、SQL戻り列数を選択する場合は、労働組合を使用することができ、等しい:

は1を選択し、「100」組合「3434」を選択し、2。

関連する問題