2

自分自身を再帰的に呼び出す MySQL 5.5 ストアド プロシージャが動作しています。

すべての呼び出しで一意の動的 SQL クエリを実行し、クエリからのすべての値をループする必要がありました。これを行うには、ビューに基づくカーソルを宣言し、動的 ​​SQL を使用してビューを作成してからカーソルを開きます。カーソルをすばやくループし、いくつかの情報を疑似配列変数に取り込み、カーソルを閉じてビューをドロップします。次に、配列に取り込まれた情報を処理します。これには、同じストアド プロシージャへの再帰呼び出しが含まれる場合があります。

私が直面している問題は、プロシージャが呼び出されるたびにビューが作成および削除されても、最初の再帰呼び出しの後にビュー定義がスタックしているように見えることです (つまり、ビューは最初の呼び出しで正常に作成されます。最初の再帰呼び出しで正常に作成されますが、ビューを作成する SQL が異なっていても、2 番目の再帰呼び出しのビューは最初の再帰呼び出しのビューと同じです。)

ビューの名前は、それが作成されるたびに同じです (MySQL で動的 SQL カーソルをシミュレートするための kludge の一部)。ただし、CREATE VIEW ステートメントは毎回異なります。

同時ユーザーが同じパブリック ビューを誤って使用するのを防ぐためのコードがあるため、ビューが期待どおりに作成および削除されていることはわかっています。つまり、ビューが既に存在するかどうかを確認して実行を遅らせます (プライベート ビューがないための別の MySQL クラッジ)。

MySQL の他のすべての欠点を回避することができましたが、これには困惑しました。洞察/支援をよろしくお願いします!

マイク

4

1 に答える 1

0

これはトランザクションの分離に関連しているようです-トランザクション内でこれを行っていますか、ドロップ後にコミットしていますか、自動コミットをオンにしていますか...?

于 2013-08-19T15:25:56.123 に答える