ホームページ >php教程 >PHP开发 >SQL カーソルを使用してループ データをトラバースする方法

SQL カーソルを使用してループ データをトラバースする方法

高洛峰
高洛峰オリジナル
2016-12-14 11:56:301338ブラウズ

データに対してトラバーサル ループ操作を実行する場合は、SQL カーソルを使用して実行できます。SQL データベースの学習に役立つことを願っています。

SQL カーソルの利点は、結果セットのデータを簡単にループして操作を実行できることです。
1. カーソルを使用すると、アプリケーションは結果セット全体に対して同じ操作を一度に実行するのではなく、クエリ ステートメント select によって返された行の結果セット内の各行に対して同じ操作を実行できます。カーソル位置に基づいてテーブル上で同じ操作を実行する機能
3. カーソルは、コレクション指向のデータベース管理システムと行指向のプログラミングを接続し、2 つのデータ処理方法を通信できるようにします。 。
ただし、カーソルには欠点もあります。複雑さと非効率がカーソルの最大の欠点であり、ストアド プロシージャを使用するときにカーソルが考慮されない主な理由でもあります。

以下は実際の作業でのカーソル例の適用です。カーソルはテーブル A のデータの列値をテーブル B の列にコピーするために使用されます。2 つのテーブルは同じ UID フィールドを持ち、条件は次のとおりです。同じ UID データがコピーされることを確認します。

declare @level varchar(100)

declare @uid varchar(100)
declare curcursor -- select Egg_code.user_id,egg_prize_level
from Egg_code inner join Egg_prize 用のカーソル
read_only
を定義しますonegg_prize.user_id =egg_code.user_id -- 取得したデータセットのカーソルを指定します

open cur -- カーソルを開きます

fetch next from cur into @uid,@level -- 抽出操作の列データをローカルに配置しますvariables
while(@ @fetch_status=0) -- 接続によって現在オープンされているカーソルのステータスではなく、FETCH ステートメントによって実行された最後のカーソルのステータスを返します。

begin

--print 'Level:'+@level+'-------------ユーザーID:'+@uid

updateegg_code set award_level=@level where user_id=@uid - -操作を実行する

--次の情報を進める

fetch next from cur into @uid,@level
end
close cur--カーソルを閉じる
deallocate cur--カーソルを削除する
go

カーソルの使用: レピュテーション カーソル、オープン カーソル、データの読み取り、クローズ カーソル、削除カーソル。 @@FETCH_STATUS は接続上のすべてのカーソルに対してグローバルであるため、@@FETCH_STATUS を使用する場合は注意してください。 FETCH ステートメントを実行した後、別のカーソルで別の FETCH ステートメントを実行する前に、@@FETCH_STATUS をテストする必要があります。 @@FETCH_STATUS の値は、この接続でフェッチ操作が発生するまで定義されません。

たとえば、ユーザーは 1 つのカーソルから FETCH ステートメントを実行し、別のカーソルを開いて結果を処理するストアド プロシージャを呼び出します。呼び出されたストアド プロシージャから制御が戻ると、@@FETCH_STATUS には、ストアド プロシージャが呼び出される前の FETCH ステートメントの結果ではなく、ストアド プロシージャ内で実行された最後の FETCH ステートメントの結果が反映されます。
上記のカーソルは、ウェブサイトの金の卵破壊イベント中に泉州 SEO によって使用され、使用プロセス中に 2 つのテーブルのデータの一部が後にプログラムに変更され、一部のデータが同期できなくなりました。フロントエンドクエリ。関連するデータがテーブル内に見つかりません。カーソルを使用する前に、単純な SQL ステートメントを使用してこのような同期機能を実現しようとしましたが、これは不可能でした。そのため、カーソルを使用するしかありません。それ。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。