2012-05-11 15 views
0

MYSQLでストアドプロシージャを書く方法を学び始めています。私はロードブロッキングを打ちました。mysqlストアドプロシージャからレコードを表示

私は、次のコードを書きました:私は繰り返し文の後に発生したselect文の結果を表示したいと思い

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `emscribedx`.`countcodes` $$ 
CREATE PROCEDURE `emscribedx`.`countcodes`() 
BEGIN 
declare doneprocessing int default 0; 
declare thisaccount varchar(50); 
declare countcursor cursor for select acct from patientid where patienttype='P'; 
declare continue handler for not found 
set doneprocessing = 1; 
Fetch countcursor into thisaccount; 
Repeat 
select * from doc_table where acct = thisaccount; 
until doneprocessing = 1 
END repeat; 
close countcursor; 
END $$ 

DELIMITER ; 

を。しかし、どうすればいいのですか?ストアドプロシージャを実行すると何も起こりません。

はなぜない代わりにこれを使用、

エリオット

答えて

0

のみ単一のクエリの結果を返すことができます手順、ありがとう!

SELECT doc_table.* 
FROM doc_table 
INNER JOIN patientid 
ON patientid.acct = doc_tableacct 
WHERE patientid.patienttype='P'; 

必要に応じて手順の中に入れることができます。

+0

これは単なるおもちゃの手順です。私はこのことで足を濡らすためにこれを試しています。私はこれらの結果を返す方法を知りたい。 – Elliott

+0

プロシージャーに単一のSELECTステートメントが含まれている場合は、呼び出されたときに照会結果が戻されます。複数の 'SELECT'が含まれている場合は、最初のものを返します(私が間違っていない場合)。 – bfavaretto

+0

@bfavaretto:それは完全に正しいわけではありません。 MySQLはストアドプロシージャ内で実行されるすべてのステートメントの結果を返しますが、クライアントはそのような複数の結果セットの読み込みをサポートしていません。たとえば、PDOでは['PDOStatement :: nextRowset'](http://www.php .net/manual/ja/pdostatement.nextrowset.php)を使って移動します。 – eggyal

関連する問題