相关文章推荐
冷冷的麦片  ·  pymysql ...·  1 年前    · 
重情义的松鼠  ·  在 ASP.NET MVC 4 | ...·  1 年前    · 

1.声明: 本人是 SqlSugar  忠实的粉丝;

2.有些坑跟Oracle 脱不开关系;

3.解决方案,肯定是有的,而且不止一种;

先讲述一下, 这个坑是怎么出来的.

一般,我本人使用联表查询(比如 A,B), 结果集 都是单独建一个 Vo, 然后用 SelectAll()  映射,一步到位.

(A表 全名: NOTICE_TODO_ITEM_RUN

B表 全名 :NOTICE_TODO_ITEM  ,部分字段 DBID,IDX, RUN_ACTION_TOTAL,RUN_ACTION_NEED)

同事有点想偷懒, 这样整.

public class A 
   public string 字段1;
   public string 字段2;
   public B  ItemB;
}

其中A,B 各表都有很多字段.

于是现在查询 为

db.Queryable<A>() .LeftJoin<B>((a, b) => a.id== b.id).Select((a, b) => new A{ id= a.id.SelectAll(),ItemB=b }

这时报了一个错:  ORA-00972 标识符过长, 查了下,  定位问题为:  别名超过30个字符.

什么意思呢, 就是  SqlSugar   生成出来的 sql为

SELECT a.*, "B"."DBID" AS "B.NOTICE_TODO_ITEM.DBID" , "B"."IDX" AS "B.NOTICE_TODO_ITEM.IDX" ,
"B"."CREATE_TIME" AS "B.NOTICE_TODO_ITEM.CREATE_TIME" , "B"."RUN_ACTION_TOTAL" AS "B.NOTICE_TODO_ITEM.RUN_ACTION_TOTAL" ,
"B"."RUN_ACTION_NEED" AS "B.NOTICE_TODO_ITEM.RUN_ACTION_NEED" ,
"B"."TITLE" AS "B.NOTICE_TODO_ITEM.TITLE" FROM "NOTICE_TODO_ITEM_RUN" a
Left JOIN "NOTICE_TODO_ITEM" b ON ( "A"."ITEM_DBID" = "B"."DBID" ) ORDER BY "A"."CREATE_TIME" DESC

其中 "B"."RUN_ACTION_TOTAL" AS "B.NOTICE_TODO_ITEM.RUN_ACTION_TOTAL"  别名 长度超过30个字符,oracle 不支持.

那现在就找解决办法:

1.该表,改字段, 让 表  和 字段 长度进行缩减;

==> 如果是新表,可以这样做,但如果是 已经上线的表,这样操作不太合适.

2.所有与B表相关的字段, 都全部列举,不用 简写的方式

比如 :

db.Queryable<A>() .LeftJoin<B>((a, b) => a.id== b.id).Select((a, b) => new A{ id= a.id.SelectAll(),ItemB=new B{ IDX=b.IDX, CREATE_TIME=b.CREATE_TIME... } }

这样如果B表字段太多,写起来有点小麻烦.

3. 既然是别名长度超过30个字符,那就想办法缩减别名

比如定义

public int? RUN_ACTION_TOTAL{ get; set; } 改为 如下这种写法

[SugarColumn(ColumnName = "RUN_ACTION_TOTAL")]

public int? TOTAL { get; set; }

生成的 sql为 B.NOTICE_TODO_ITEM.TOTAL 这样 一定程度上 满足了 30个字符的要求.

但是 如果真的有那种表名特别长的, 比如  >=27个长度的, B.[27].  这就30个字符了,后面完全没有改字段的余地了.

所以如果项目没上线, 最好还是修改表名和字段名, 尽量简短.(写好注释和文档即可)

作者:兴想事成



android怎么使用fastjaon 安卓手机fast

在Android中除去UI、逻辑,剩下基本就是网络请求、数据解析了,关于网络请求,之前已经写过了,那么这里讲的是JSON解析了;此文仅献给和从前的我、一样的新手,那么用最简单的方式去copy知识吧 基础了解先行配置常用API场景使用实现效果实现过程 基础了解Hint:本篇主讲fastJson的解析方式 ~Json在Android中的三种解析方式 JsonObject(Google原生)- 使用较少