2011-06-23 14 views
0

私のDB内のいくつかのテーブルに対して同じ手順を実行する必要があります。MySQL:いくつかのテーブル用に1つのストアドプロシージャ

DECLARE tableIt CURSOR FOR select id from table where column=inputParam ; 

tableが手順で扱うテーブルです:poblemは、その手順は以下の行が含まれていることです。そして、そのテーブル名を動的にする、つまり入力パラメータから読み込む方法を見つけることができません。

今は1つの単語(表の名前)だけを区別する8種類の手順(各表に1つずつ)があります。 これは、手順を8回変更する必要があるため、実際には苦痛です。

CURSORのselect文をパラメータ化して、1つのプロシージャしか持てないのですか?

答えて

0

ダイナミックカーソルはMysqlではサポートされていないようです。 http://dev.mysql.com/doc/refman/5.1/en/cursors.html

あなたはそれが

http://forums.mysql.com/read.php?98,133197,149099#msg-149099

"DROP VIEW IFがV1 EXISTS;

SETする@ STMT_TEXT = CONCATを回避することができます("「FROM AS SELECT C_TEXT V1のCREATE VIEW、t_name)。

は@stmt_text FROM STMTを調製;

STMTをEXECUTE;

DECLAREのv_text VARCHAR(45)BEGIN。

DECLARE done INT DEFAULT 0; V1 FROM SELECT C_TEXT FOR

DECLARE Cのカーソル;。。」

+0

良いアイデアは、私はしかし、一時テーブルを使用する方が良いと思いますが、その使用している場合は何のスレッドの安全性は存在しないので、ビューがグローバルオブジェクトです( 2つの接続が異なるテーブルの同じビューを作成しようとしている可能性があります) – GetFree

+0

一時テーブルの問題は、挿入され、処理が遅くなることがありますが、この一時テーブルへの同時アクセスで問題が発生することがあります。また、あなたのjava/perl/phpコードからそれを起動させないのは簡単なようですが、動的クエリを構築することができます。 – isobar

関連する問題