分割データベースの倉庫ドキュメントの数 - カーソルによって達成

スプリット生保存する必要がある- @yssl int型を宣言する
宣言@nameのVARCHAR(50) -元のテーブルの名前が
ためm_cankuカーソルのスクロールを宣言-生データは、カーソル定義
オリジナル-選択名、tbl_testからSLをテーブル内のデータ
の元データカーソルを開く-オープンm_canku
、@名に次のm_cankuからフェッチ yssl @ - カーソルサイクル
しばらくFETCH_STATUS @@ = 0
始める
プリント@ysslが
tbl_Tempを削除-サイクルの前に一時テーブルを空に
/ ****始めます******* /濾過一時テーブルに倉庫の現在の行のデータの元の量に適合するデータ
INSERT INTO tbl_Temp(ヘルツ、SL、ckid)はヘルツ、SL、a.idを選択(からIDを選択します2.Hz、a.sl、sumqty AS(WHERE a.idのB> = b.id AS tbl_cankuから(b.sl)QQQ SUMを選択)
tbl_canku A)Aから
WHERE ID <=(上からIDを選択します。1(SELECT .ID、a.hz、a.sl、(選択 sumqtyとしてtbl_cankuのB a.id> = b.idからQQQよう和(b.sl))をtbl_canku Aから
)A a.sumqty> = @ yssl)
a.id順
/ ****端******** /

倉庫サブカーソルの定義-ためm_cursorカーソルスクロールを宣言
tbl_Tempからckid選択ヘルツ、SL、 - 倉庫カーソルにフィルタリングされたデータ

オープンサブカーソル-オープンm_cursor
宣言@hzのVARCHAR(50)、@slの 、INT @ckid int型
次にHzの@、@のSL、ckidする@ INTO m_cursorからFETCH -サブカーソルのサイクルが始まる
一方FETCH_STATUS @@ = 0を
開始
DECLAREの@tempint INTを
IF(@yssl> @sl) -数は、元のデータよりも大きい場合倉庫の数の最初の行は、データを生成する中間テーブルに分割した後、算出され続ける
始める
IF(@sl> 0)で
始まる
、ヘルツ@ tbl_wuliaoへの挿入を(名前、ヘルツ、SL)の値(名前@を、@ SL) -テーブルに中間データ
セット@ yssl = @ yssl- SL @ ; - スプリット第二のデータは、元のデータの個数が操作は挿入することが必要であり、現在のデータウェアハウスよりも大きいので続ける
tbl_cankuセットを更新SL = ID = @のckid 0 - 数更新リポジトリ
「1'の印刷
終了が
終了
他IF(= @ ysslのSL @) -元のデータの個数や倉庫の現在の数などは、直接中間データに挿入する場合テーブル
開始
(@sl> 0)IF -の0フィルタリングされたデータ量
始める
(@名、ヘルツは、@ SL @)tbl_wuliao INTO INSERT(名前、ヘルツ、SL)の値
--set A- @ A @ SL = ;
更新tbl_cankuセットSL = ID = @のckid 0 -数更新リポジトリ
印刷」1'
BREAK
終了が
終了
そう-数は、直接にデータの分割に、倉庫の最初のデータ行の元の数よりも少ない場合次いで、中間リポジトリのテーブル番号更新
ザ開始を
IF(@yssl> 0)
開始
tbl_wuliao(名前、ヘルツ、SL)値にINSERTを(@名、ヘルツは、@ yssl @)
更新tbl_canku SET SL = SL-WHERE ID = @ yssl ckidの
印刷は'2'
BREAK
エンド
エンド
ckidの@次Hzの@、@のSL、INTO m_cursorからFETCH
エンド
クローズストレージサブカーソル-閉じるm_cursor
割り当て解除のm_cursor -クローズストレージサブカーソル
@名に次のm_cankuからのフェッチ、 @のyssl
終了
閉じるm_cankuを-メインカーソルの元データ閉じる
DEALLOCATEのm_cankuを-メインカーソルの元データを閉じます

おすすめ

転載: www.cnblogs.com/hn_lijia/p/11117759.html