在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;