基本的な考え方1、カーソル
データバッファの思考:カーソルデザインがあるデータバッファ使用の思考、実行されたSQL文の結果を格納します。
前のデータベース:カーソルが前のデータテーブルからデータを取り出す柔軟な運用を継続する前に技術を。
ポインタのようなカーソルデータに類似した構造ポインティング:スタックポインタのみを取って、データポイントのポップを、それぞれ。
以前のMySQL関数を読めば、あなたは複数行の文が結果を返すために使用することはできないでしょう。あなたが本当に使いたいとカーソルを使用する必要がある場合でも、カーソルが(あなたが単一の結果を返すために行うことができるように)あなたが特定の結果を選択することができます。
また、カーソルが容易に検索行に除去することができる前方または後方に1つ以上の行の結果を移動します。
カーソルの戻り通過できる複数行の結果を。
- MySQLのカーソルは、ストアドプロシージャや関数に適用されます。
図2に示すように、カーソルを使用して
主に、一般的に5つのステップに分けカーソルの使用:カーソル定義- >開くカーソル- >カーソル- >カーソルをクローズ- > [リリースカーソルを。
前提:
- 主キーのないテーブルは、循環されたであろう、2つのテーブルを作成し 、CREATE TABLEのクラス(上記のID INT(5)PRIMARY KEY、名前VARCHAR(を10 )); CREATE TABLEクラス2(上記のID INT(5)PRIMARY KEY、名前VARCHARを(10 )) ; - に挿入されたクラスデータ INSERT INTOのクラス(id` `` NAME`)VALUES(' 1 '、' ceshiを' ); SELECT * FROM クラス。 - テーブルを削除するか、削除するクラスデータテーブル DELETE FROM クラス2を、 DROP TABLEクラス2。
作成 手順P2() 開始 DECLARE上記のID挙げINTを、 DECLARE名VARCHAR(15 ); - カーソル宣言 DECLAREを MC カーソル ための SELECT * からクラス; - カーソル開く 開きMCと、 - 取得結果に ループ - ループ、目次クラス2は、に転送される FETCH MC にID、名前、 - ここでの結果は得ることが INSERTを INTOクラス2の値(ID、名前); -カーソル閉じ エンドループ; 閉じるMC; エンド ;
コードが与えられました
テーブルクラス2は、主キー、連続サイクルを持っている、それは常に、テーブルの端に到達し、終了前に定義されたMySQLを持っているために、一般的にエラーを回避する必要があり、フェッチの最後まで続けることができません
DELIMITER // 作成 手順P2() 開始 DECLARE上記のID挙げINTを、 DECLARE名VARCHAR(15 ); - カーソル宣言 DECLAREを MC カーソル ための SELECT * から、クラス - カーソル開く 開き、MCを - 取得結果 ループ - 、サイクルテーブルの内容は、クラス2に転送され 、FETCH MC にID、名前と、 IFフラグに= 1。 次に -続行ハンドラトリガーフェッチしないときは 、休職L2 エンド IF ; - ここでの結果は取得する INSERT INTOクラス2の値(上記は、ID、名前を言及した); - カーソルをクローズ エンドループ; 閉じる使っMCを; エンド; // DELIMITER; CALLのP2を( );