zoukankan      html  css  js  c++  java
  • sql 游标

    关于游标的详细信息可参见http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html博文

    本文只是针对sql2008下函数使用游标的完整方法的展示

    USE [hbsp]
    GO
    /****** Object:  UserDefinedFunction [dbo].[Func_GetTeamLeader]    Script Date: 06/06/2014 09:31:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER  function [dbo].[Func_GetTeamLeader]( @SPT_ID char(13)) returns varchar(50)
    as
    begin
     
    
       declare vLeader cursor for select r.name 
    from  
           dbo.t_spmember as m, 
           dbo.renyzl as r 
    where  
           r.per_num =m.spm_num 
       and m.spt_id=rtrim(@SPT_ID) and m.SPM_ORDER=1 ; 
       
     declare @sResult varchar(50)
     declare @sTmp  varchar(50)
     declare @name varchar(50)
     set @sResult =''
     
      
      -- 打开游标
     OPEN vLeader
     
     -- 遍历游标开始
     FETCH NEXT FROM vLeader INTO @name
     
     WHILE @@FETCH_STATUS = 0
      BEGIN
      
     if (rtrim( @name) is not null)
     begin
           set  @sTmp = rtrim(@name);
           
            if (len(rtrim(@sResult + @sTmp)) <= 2000 )
    			begin
    			   if (rtrim( @sResult) is not null )
    			   BEGIN
    			   set @sResult = @sResult + @sTmp+',' ;
    			   END
    			  end
       end 
        -- 下一个
        FETCH NEXT FROM vLeader INTO @name
      END
     -- 关闭游标
     CLOSE vLeader
     -- 释放游标
     DEALLOCATE vLeader 
     if(rtrim( @sResult) is not null)
      begin
      set @sResult=SUBSTRING(@sResult,1,len(@sResult)-1);
      end
      return @sResult 
    end;
    

     sql2008下游标中的参数必须全部定义参数的长度,否则会查不出结果

    oracle 中函数使用游标实例与上面sql的方法相同

    create or replace function Func_GetTeamLeader(tnum char ) return char
    is 
    cursor vLeader(v char) is  
         select r.name 
    from  
           t_spmember m, 
           renyzl r 
    where  
           r.per_num =m.spm_num 
       and m.spt_id=trim(v) and SPM_ORDER=1 ; 
     
    rwf vLeader%rowtype; 
    sResult varchar2(2000); 
    sTmp    varchar2(2000); 
    begin 
      sResult :=''; 
     
      for rwf in vLeader(tnum) loop 
         if rtrim( rwf.name) is not null then 
            sTmp := rtrim(rwf.name); 
            if length(rtrim(sResult || sTmp)) <= 2000 then 
               sResult := sResult || sTmp || ','; 
            else 
               exit; 
            end if; 
         end if; 
      end loop; 
       
      if rtrim( sResult) is not null then 
         sResult:= substr( sResult,1, length(sResult)-1); 
      end if; 
     
     
     return sResult; 
    end;
    
  • 相关阅读:
    mysql 查询某年某月数据~(如果数据表用时间戳)
    mongo_4.25 find() hasNext() next()
    在YII框架中有2中方法创建对象:
    bootsrap[$data]
    date
    cookie
    JavaScript shell, 可以用到 JS 的特性, forEach
    在 Yii框架中使用session 的笔记:
    mysql查询今天、昨天、7天、近30天、本月、上一月 数据
    Python 自定义异常练习
  • 原文地址:https://www.cnblogs.com/zlqblog/p/3772365.html
Copyright © 2011-2022 走看看