达梦数据库学习之五:(SqlServer中的临时表)

在SqlServer中,我们很容易就生成一个临时表  

select top 10 UserId,UserName,UserSex 
   into #tmp1
   from KT_U_User order by UserId

其中#tmp1就是临时表,我们可以对他直接进行表的各种相关操作,前面我们讲过达梦的临时表和Sqlserver不一样达梦数据库学习之一:临时表和集合类型_bestyellow的博客-优快云博客达梦数据库学习之一:临时表和集合类型https://blog.youkuaiyun.com/bestyellow/article/details/127782165,不过我们也可以通过下面的方法来部份实现上面的临时表功能

declare
  v_Row1 Rec_Sj%ROWTYPE;
begin
 select top 1 UserNo,UserId,UserName
       into v_Row1
       from KT_U_User
       where UserName like '%李%'
       order by UserId;
       print v_Row1.UserNo||','||v_Row1.UserId||','||v_Row1.UserName;
end;

上面的方法一次只能取一行数据,不满足要求,我们可以进一步来把它定义成表类型

DECLARE
   TYPE Rec_Sj IS RECORD("UserNo" INT, "UserId" VARCHAR(50),"UserName" VARCHAR(50));
   --v_Row1 Rec_Sj%ROWTYPE;
   TYPE Tmp_TableKj IS TABLE OF Rec_Sj;
   TmpKjDb Tmp_TableKj;
begin
    select UserNo,UserId,UserName
       BULK COLLECT INTO TmpKjDb
       from KT_U_User
       where UserName like '赵%'
       order by UserId;              
    select * from table(TmpKjDb);   
  
end;    

这里面的 table(TmpKjDb)与Sqlserver的临时表#tmp1 相似,如果有两个Table集合,又怎么快速的合并?目前只想到了Sql语句中的select  union 后再BULK COLLECT INTO  Table集合,

     关于它的快速更新目前还未查到相关的Sql快速操作,有知到的请给我留言。

下面是本次学习的所有代码:

DECLARE
   TYPE Rec_Sj IS RECORD("UserNo" INT, "UserId" VARCHAR(50),"UserName" VARCHAR(50));
   --v_Row1 Rec_Sj%ROWTYPE;
   TYPE Tmp_TableKj IS TABLE OF Rec_Sj;
   TmpKjDb Tmp_TableKj;
   TmpKjDb1 Tmp_TableKj;
   TmpKjDb2 Tmp_TableKj;
begin
  DECLARE
  begin
    /* 一次只能一条记录  
    select top 1 UserNo,UserId,UserName
       into v_Row1
       from KT_U_User
       where UserName like '%李%'
       order by UserId;
       print v_Row1.UserNo||','||v_Row1.UserId||','||v_Row1.UserName;
    */
    --一次多条记录
    select UserNo,UserId,UserName
       BULK COLLECT INTO TmpKjDb1
       from KT_U_User
       where UserName like '赵%'
       order by UserId;

    select top 30 UserNo,UserId,UserName
       BULK COLLECT INTO TmpKjDb2
       from KT_U_User
       where UserName like '%爱%'
       order by UserId;
  end;

  select * BULK COLLECT INTO TmpKjDb
    from (
      select * from table(TmpKjDb1)
      union
      select * from table(TmpKjDb2)
  );
  select * from table(TmpKjDb);
  
end;    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值