Maison  >  Article  >  php教程  >  SQL 游标 一个简单的例子

SQL 游标 一个简单的例子

高洛峰
高洛峰original
2016-12-14 11:28:161372parcourir

一、游标的作用:

        Select时,返回的是一个结果集,若需要为结果集返回的过程中,读取到一行数据。需要对此行数据进行处理,比如按读取到的数据作为查询条件返回一个查询结果集等等,应用都需要用到游标。

      游标可允许 用户 查询下一行、上一行、第一行或最后一行,并对这些读取到的行进行处理。

二、游标举例

CREATE FUNCTION GetMRPlnFullBom  --创建一函数,根据单据电键查询单据中每行,并对每行数据进行处理。   

(  

         @DocEntry int  

)  

RETURNS @TAB TABLE   -- 将最终查询的结果集定义临时表,返回。   

(  

    DocEntry int,  

    LineNum int,  

    LineNumLevel nvarchar(100),  

    ItmID nvarchar(20),   

    ItmName nvarchar(100),  

    LineType char(1),  

    Qty numeric(19,9),  

    BomLevel int,  

    ParentEntry int,  

    ParentItmID nvarchar(20),  

    TopEntry int,  

    TopItmID nvarchar(20) ,  

         BaseEntry int ,  

         BaseLineNum int ,  

         BaseType int  

)  

AS  

BEGIN  

Declare  @ItmID varchar(50) , @Qty int ,@LineNum int ,@ObjType int   --声明局部变量   

--声明一游标,声明游标时 XXX前不能加@,比如下面的MRPlnA_ItmID ,格式是DECLARE XXX CURSOR FOR        

DECLARE MRPlnA_ItmID CURSOR FOR   

SELECT ItmID , Qty ,LineNum , ObjType FROM MRPlnA  Where DocEntry = @DocEntry --语句要在DECLARE XXX CURSOR FOR与OPEN XXX之间。   

Open MRPlnA_ItmID      --打开游标   

FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType --FETCH NEXT FROM XXX INTO ... 更新游标指定记录即换行,并将Select出来的数据,存入临时变量中。  FETCH格式上除了NEXT还有PRIOR、FRIST、LAST。分别是上一行、第一行及最后一行。   

WHILE @@FETCH_STATUS = 0 --@@FETCH_STATUS全局变量,用于查询FETCH最后一次状态,控制循环。当读取完时是0,读取失败是-1,记录被删除是-2。   

BEGIN  

Insert Into @TAB  

Select DocEntry,LineNum,LineNumLevel,ItmID,ItmName,LineType,Qty*@Qty,BomLevel,ParentEntry,   

ParentItmID,TopEntry,TopItmID , @DocEntry SourceEntry ,@LineNum BaseLineNum ,@ObjType BaseType   

From GetBomFullItems(@ItmID, 'V 1.0', GetDate()) TD --GetBomFULLItmes是另一查询函数。   

FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID  , @Qty ,@LineNum , @ObjType -- Select移到下一行。   

END  

CLOSE MRPlnA_ItmID       --关闭游标   

DEALLOCATE MRPlnA_ItmID  --释放游标   

RETURN   

END  


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:SQL 游标使用实例Article suivant:SQLSERVER游标及循环语句