zoukankan      html  css  js  c++  java
  • Sybase:游标用法以及嵌套用法

    Sybase:游标用法以及嵌套用法

    游标示例一:

    --Sybase游标示例一:
    create PROCEDURE DBA.p_proc_test() ON EXCEPTION RESUME 
    begin
     declare @table_name varchar(100);
      declare @count varchar(100);
     declare @rownumber int;
      declare HISTORYDATA dynamic scroll cursor for select  a.table_name ,a.count rownumber,number(*) from systable a,systable b,systable c order by a.count desc;
    
      open HISTORYDATA with hold;
      fetch next HISTORYDATA into @table_name,@count,@rownumber;
      while @@SQLSTATUS = 0  loop
        insert into test_tmp values(@table_name,@count,@rownumber);
     fetch next HISTORYDATA into @table_name,@count,@rownumber;
      end loop;
      close HISTORYDATA;
      deallocate cursor HISTORYDATA;
    
    end

    游标示例二:

    --Sybase游标使用示例二(循环):
    create PROCEDURE DBA.p_proc_test2() ON EXCEPTION RESUME 
    begin
     declare @table_name varchar(100);
      declare @count varchar(100);
     declare @rownumber int;
     declare @num int;
    
      declare HISTORYDATA dynamic scroll cursor for select  a.table_name ,a.count rownumber,number(*) from systable a order by a.count desc;
    set @num=(select 0);
    while @num<=30 loop
      open HISTORYDATA with hold;
      fetch next HISTORYDATA into @table_name,@count,@rownumber;
      while @@SQLSTATUS = 0  loop
        insert into test_tmp2 values(@table_name,@count,@rownumber,getdate());
     fetch next HISTORYDATA into @table_name,@count,@rownumber;
      end loop;
      close HISTORYDATA;
     
    set @num=(select @num+1);
    end loop;
     deallocate cursor HISTORYDATA;
    end

    游标示例三(嵌套): 

    --Sybase:游标嵌套用法
    create PROCEDURE DBA.p_teset(@i_rq int)
    begin
      -- 声明局部变量(变量需要一开始声明)
      declare @cur_pk_corp varchar(50);
      declare @c_pk_corp  varchar(50); 
      declare @c_orgname  varchar(50); 
      declare @c_pk_org varchar(30);
      declare @c_pk_deptdoc varchar(20);
      declare @c_px int; 
      declare @c_px_new int; 
      -- 声明游标 (游标需要一开始声明)
      --游标一
      declare c_corp dynamic scroll cursor  
        for select a.pk_corp from t_corp a group by a.pk_corp order by a.pk_corp ;  
      --游标二
      declare c_org  dynamic scroll  cursor  
        for select a.pk_corp, a.orgname, coalesce(b.pk_org,a.pk_org) as pk_org,a.pk_deptdoc,
        (select convert(int,case when substring(max(t.pk_org),char_length(max(t.pk_org)) ,char_length(max(t.pk_org))) is null then '0' else substring(max(t.pk_org),char_length(max(t.pk_org)) ,char_length(max(t.pk_org))) end)  from dba.t_dim_org_fix t where t.pk_corp=a.pk_corp) as px
          from t_corp a left outer join dba.t_org_fix b on a.pk_corp=b.pk_corp and a.pk_deptdoc=b.pk_deptdoc and a.pk_corp=@cur_pk_corp ;
      --初始化参数
      set @c_px = 0;
      -- 打开游标  
      open c_corp with hold;  
      FETCH  NEXT  c_corp INTO  @cur_pk_corp;
      --循环一个游标
      WHILE @@SQLSTATUS  = 0 loop
        set @c_px_new =1;
        -- 循环所有行  
        -- 声明局部变量 
         -- 打开游标  
          open c_org with hold; 
          FETCH  NEXT c_org INTO @c_pk_corp, @c_orgname, @c_pk_org, @c_pk_deptdoc, @c_px;  
          -- 循环所有行 
          WHILE @@SQLSTATUS = 0 loop
            -- 循环所有行  
            set @c_px = @c_px  + @c_px_new ;
              set @c_px_new = @c_px_new +1;
              insert into dba.t_org_fix(pk_org,hr_name,enable_date,disabled_date,remark,pk_corp,pk_deptdoc)
              values(@pk_org||'X'||@c_px,@c_orgname,@i_rq,20991231,'', @c_pk_corp, @c_pk_deptdoc);
          FETCH  NEXT c_org INTO @c_pk_corp, @c_orgname, @c_pk_org, @c_pk_deptdoc, @c_px;  
          END loop;
          -- 关闭游标  
          close c_org;
          FETCH  NEXT  c_corp INTO  @cur_pk_corp;
      end loop;
      -- 关闭游标  
      close c_corp ;
      --释放资源(最后释放)
      DEALLOCATE cursor c_org;
      DEALLOCATE CURSOR c_corp;  
    end
  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业07
    C语言I博客作业03
    oracle 创建用户并指定表空间
    Oracle 给用户赋予dblink权限,创建dblink
    IDEA 2020.2 破解、激活
    nginx 里的常用变量
    nginx 跨域问题解决
    elasticsearch (一)
    kubenetes 安装部署
  • 原文地址:https://www.cnblogs.com/lizm166/p/8548789.html
Copyright © 2011-2022 走看看