BOS-创建临时表原创
金蝶云社区-eris
eris
18人赞赏了该文章 1,130次浏览 未经作者许可,禁止转载编辑于2022年10月10日 15:32:25

备注

      一般查询数据使用列做过滤,或者把某些数据缓存起来,都会使用到临时表。BOS中可以供使用的临时表包括会话级别临时,物理临时表和表变量。特别注意这些Oracle下是不能创建临时表的,否则会导致事务提交。

临时表的创建

1、表变量

     主要使用在查询数据,过滤条件数量大于50,小于500的情况

字符串类型的PkIds

 var arrPkIds = lstPkIds.Distinct().ToArray(); //一定要去重复,否则存在重复值会报错

 var paramName = "@FID";

 //默认得到括起来的子查询,如果加参数false,则得到别名为b的子查询

 var filter = StringUtils.GetSqlWithCardinality(arrPkIds.Length, paramName, 2);

 var sqlParam = new SqlParam(paramName, KDDbType.udt_varchartable, arrPkIds);

长整形类型的PkIds

 var arrPkIds = lstPkIds.Distinct().ToArray(); //一定要去重复,否则存在重复值会报错

 var paramName = "@FID";

 //默认得到括起来的子查询,如果加参数false,则得到别名为b的子查询

 var filter = StringUtils.GetSqlWithCardinality(arrPkIds.Length, paramName, 1);

 var sqlParam = new SqlParam(paramName, KDDbType.udt_inttable, arrPkIds);

2、会话级别临时表

一般过滤条件数量大于500,使用临时表

首先要包含在SessionScope中,SessionScope确保里面的代码连接是相同的,所以创建的局部临时表可以在里面一直使用

 using (Kingdee.BOS.App.Data.SessionScope scope = new SessionScope())

 {

      //得到临时表名

  var tempTbName ="TM_tableName";

      var tempTableName = DBUtils.CreateSessionTemplateTable(ctx, tempTbName, "(FID BIGINT)");

  //然后把相关的过滤数据灌入到临时表中

。。。。。。。

  //如果在会话中需要多次创建则需要删除临时表

 DBUtils.DropSessionTemplateTable(this.Context, tempTableName);

 }

3、物理临时表

   其实就是物理表,只不过表名是唯一的,用户之后最后删除,否则会也积也多,当然平台隔一段时间也会自动清理。

 var tempTableName = TemporaryTableUtil.CreateTemporaryTableName(this.Context);

//创建临时表结构

。。。。。。。。

 HashSet<string> hs =new HashSet<string>();

 hs.Add(tempTableName);

//删除临时表

 TemporaryTableUtil.DropTable(this.Context, hs);


图标赞 18
18人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0