1. カーソルの役割:
選択すると、結果セットを返すプロセス中にデータ行を読み取る必要がある場合に返されます。このデータ行は、クエリ条件として読み取られたデータに基づいてクエリ結果セットを返すなど、処理する必要があります。アプリケーションはカーソルを使用する必要があります。
カーソルを使用すると、ユーザーは次の行、前の行、最初の行、または最後の行をクエリし、これらの読み取られた行を処理できます。
2. カーソルの例
CREATE FUNCTION GetMRPlnFullBom - ドキュメント キーに基づいてドキュメント内の各行をクエリし、各行のデータを処理する関数を作成します。
(
through use using use using using through using ’ through ’ s ’ through using using using ‐ ‐ ‐ ‐ ‐ ‐ 最終クエリの結果セットの一時テーブルを定義して返します。
(
DocEntry int,
LineNum int,
LineNumLevel nvarchar(100),
ItmID nvarchar(20),
ItmName nvarchar(100),
LineType char(1),
数量数値( 19,9)、
BomLevel int、
ParentEntry int、
ParentItmID nvarchar(20)、
TopEntry int、
TopItmID nvarchar( )
)
AS
BE GIN
@ItmID varchar( を宣言) 50) 、 @Qty int 、@LineNum int 、@ObjType int -- ローカル変数の宣言
-- カーソルの宣言。カーソル @ を宣言する前に XXX を追加することはできません。たとえば、次の MRPlnA_ItmID、形式は DECLARE XXX CURSOR です。 FOR = @DocEntry -- ステートメントは DECLARE XXX CURSOR FOR と OPEN XXX の間にある必要があります。
Open MRPlnA_ItmID -- カーソルを開きます
FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID, @Qty,@LineNum, @ObjType --FETCH NEXT FROM 選択したデータを一時変数に保存します。 FETCH 形式には、NEXT のほかに、PRIOR、FRIST、LAST があります。前の行、最初の行、最後の行です。
WHILE @@FETCH_STATUS = 0 --@@FETCH_STATUS グローバル変数。FETCH の最後のステータスをクエリし、ループを制御するために使用されます。読み取りが完了した場合は 0、読み取りが失敗した場合は -1、レコードが削除された場合は -2 になります。
BEGIN
@TAB に挿入
Select DocEntry,LineNum,LineNumLevel,ItmID,ItmName,LineType,Qty*@Qty,BomLevel,ParentEntry,
ParentItmID,TopEntry,TopItmID, @D ocEntry SourceEntry ,@LineNum BaseLineNum , @ ObjType BaseType
From GetBomFullItems(@ItmID, 'V 1.0', GetDate()) TD --GetBomFULLItmes は別のクエリ関数です。
FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID 、 @Qty 、@LineNum 、 @ObjType -- 選択すると次の行に移動します。
END
CLOSE MRPlnA_ItmID -- カーソルを閉じる
DEALLOCATE MRPlnA_ItmID -- カーソルを放す
RETURN
END