EAS扩展报表数据集执行常见报错及解决方案
客户端制作扩展报表数据集时,有时会因为一些语法或数据库差异导致查询报错,导致报错的可能原因大概有以下原因,可参考进行问题分析排查。
1.使用with关键字
对于客户使用SQL Server数据库时,偶尔会碰到一些奇怪的问题,在其他类型数据库可以正常执行的SQL数据集,同样的SQL在SQL Server数据库执行却报错。
如:WITH TEMP AS(SELECT * FROM TableA)
SELECT * FROM TEMP;
该种语法在工具连接SQL Server数据库时可正常执行。
![sqlserver01.webp](/download/01006bb1bdc510494c94b9ae5b492550b8c8.webp)
客户端连接SQL Server数据库执行数据集会报错,
![sqlserver02.webp](/download/0100dda1bed6a81c4fa98d09b554117d615b.webp)
![sqlserver03.webp](/download/010099788f026e154cd7abb89999f844107c.webp)
报错原因分析:报表调用引擎执行取数sql时,引擎接口做了一些分页等其他操作后在源sql外层包装了一些select查询语句,导致with语句部分被作为了子查询,而SQL Server数据库不支持with作为子查询,故执行会报上面截图错误。
![sqlserver04.webp](/download/010027025685915f417084d24a13cc90d50d.webp)
SQL Server工具中执行with子查询也会执行报错。
![sqlserver05.webp](/download/010045f40646f2744c548259b0c844264252.webp)
建议:客户端连接SQL Server数据库时,避免使用with语法,Oracle、PostgreSQL数据库可以正常使用。
2.union和union all关键字
客户端连接PostgreSQL数据库时,使用union或者union all拼接多段select查询时报错。
![pg01.webp](/download/010089e20dc6d86844aaa7e9e730a0a7781c.webp)
错误原因分析:报表在检查sql语法的正确性时,会在每一个select语句中增加top关键字进行语法校验,引擎后面在做sql解析时,会根据数据库类型做分页处理,如转成limit语句,由于报表在多个select中都加了top关键字,导致引擎截取的时候只从最后一个limit截取,sql就会不完整,执行报错。
![pg02.webp](/download/010007c580cacb064a6fa99703ce1a0ce1a0.webp)
解决方案:报表优化处理sql的代码,对于多个select使用union或union all时,在最外层包装top检验语法,避免出现多个top影响引擎解析sql,如select top n * from (select fnumber from a union all select fnumber from b )。
|版本|领域|补丁号|
|-|-|-|
|EAS861|报表中心|PT167299|
3.存储过程数据集执行没有数据
部分客户EAS800升级到EAS861之后,存储过程数据集执行后没有数据,EAS820执行有数据。
问题分析:打开扩展报表控制台查看sql执行情况。
![存储过程01.webp](/download/0100850a59895818459d9d1ee557efe8e002.webp)
![存储过程02.webp](/download/0100990bbfc789954fd7afb8e8b3ea2635c4.webp)
通过控制台日志发现,数据集部分参数不选参数值时,最终绑定的存储过程数据集参数却拼接了=null的参数值,导致最终执行存储过程时没有数据展示。
调试代码发现,没有选择参数值的参数,在设置参数值的时候都设置了null,在预编译的时候通过prepareStatement.setNull(i,sqlType)是会处理成param = null,导致没有数据。
解决方案:EAS861更新补丁解决。
|版本|领域|补丁号|
|-|-|-|
|EAS861|报表中心|PT168788|
4.PostgreSQL数据库中数据集执行报错
客户端连接PostgreSQL数据库时,点击宏定义或数据集参数引用宏时,点击详细设置按钮报错。
![宏01.webp](/download/0100d63280351b34489e84c9e184ac527767.webp)
![宏02.webp](/download/0100eb4b6b501eb647209443cea8ccd592b5.webp)
原因分析:PostgreSQL中,新增宏定义时,由于宏描述字段为非必填字段(查看表结构NULLABLE=TRUE),用户没有填写该字段时,可正常进行保存,当再次编辑时,引擎序列化该字段时,由于字段长度为0,因此代码执行会抛出以上截图的异常。
![宏03.webp](/download/01008fac2d68724747fc8ed128b5da002937.webp)
解决方案:引擎序列化长度为0字段时,直接返回null即可,EAS861已有补丁解决。
|版本|领域|补丁号|
|-|-|-|
|EAS861|BOS_RTE|PT165027|
**后续持续完善补充其他场景...**
EAS扩展报表数据集执行常见报错及解决方案
客户端制作扩展报表数据集时,有时会因为一些语法或数据库差异导致查询报错,导致报错的可能原因大概有以下原因,可参考进行问题分析排查。...
点击下载文档
上一篇:【移动报表工具】操作手册下一篇:【扩展报表】操作手册
本文2024-09-22 18:10:48发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-99125.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章