反馈已提交

网络繁忙

填报常见报错代码

  • 文档创建者:Leo.Tsai
  • 历史版本:41
  • 最近更新:星踪 于 2023-07-31
  • 概述

    本文介绍填报模板制作、预览、提交过程中,常见的问题及排查步骤。

    排查方法

    根据本文了解了相关报错可能的原因后,可以采取一些针对性的方式去定位问题,下面列出几种常用的方法。

    • 对填报属性进行二分法测试,定位到出问题的字段,查看其绑定的值是否有问题。

    • 对模板结构进行简化,删除不相关的元素,定位出问题点。

    • 在数据库新建一个简单的表来测试是否提交成功。

    • 更换其他数据库来提交测试。

    • 使用 填报调试插件,协助排查问题。

    填报提交通用报错

    常见报错代码


    报错可能原因
    1无法将 NULL 插入XX数据库表设置了某字段不能为空,但是该字段提交的数据中存在空值
    2check constraint (NASMES.SYS_C0014107) violated提交的数据中存在违反数据库设置的约束的数据,比如某字段设置为了主键不能有重复值,但是提交的数据中存在重复值
    3违反唯一键约束
    4Violate unique constraint on[***]
    5no operation allowed after statement closed数据库设置了权限,限制了增删改sql语句的执行
    6no operations allowed
    7当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXX' 中的标识列插入显式值对自增长 id 进行修改时的报错,可参考 数据库自增长ID填报 解决
    8无效数字某个提交值和其入库字段类型不一致
    9批处理异常
    10No value specified for parameter XX
    11数据提交错误,索引中丢失in 或out
    12没有为参数号XX设置值
    13数据列类型错误/不匹配
    14FR-Engine-Write_Column_Type_Mismatch
    15公式解析错误某个公式存在问题
    16Task DCL error HiveException: [Error 20132] Error, you should set transaction.type before any DCL statement星环数据库的报错,未在 DCL 声明前定义事务类型,可尝试在数据连接url后增加 transaction.type=inceptor 参数
    17Attempt to do update or delete using transaction manager that does not support these operationshive 数据库中没有开启 update 和 delete 操作,需要在数据库开启
    18没有为参数号设置值检查填报属性的「内置SQL」提交设置中,「值」是否都已配置且配置正确

    19ORA-02050填报后触发了不支持的数据库分布式事务
    20Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='数据库中数据表的编码方式不一致,在取数后无法进行比较,导致提交失败。解决方案可参考:https://help.fanruan.com/finereport/doc-view-3185.html#48e5560ff7af80f4
    21存在笛卡尔积部分填报单元格的父子格关系异常,造成了数组*数组的结构。可以按照报错中提示的字段定位具体单元格,修改父子格解决。

    user lacks privilege or object not found

    点击展开更多

    问题描述:

    填报提交时出现报错:user lacks privilege or object not found

    原因分析:

    填报入库的目标数据表被删除/表名称变化,导致无法找到目标数据表

    解决方案:

    1)检查填报入口的目标数据表是否发生了变更

    2)在「报表填报属性」中修改目标数据库表名

    wrong path exists

    点击展开更多

    问题描述:

    填报提交时出现报错:wrong path exists

    原因分析:

    填报属性>上传至服务器>磁盘路径填写错误

    解决方案:

    修改磁盘路径

    Field 'ID' doesn't have a default value

    点击展开更多

    问题描述:

    填报提交时出现报错:Field 'ID' doesn't have a default value

    原因分析:

    报错的「ID」字段是主键,填报的时候没有为ID设置对应值

    解决方案:

    1)在数据库中为ID字段设置自增长

    2)填报时填报ID字段

    java.util.ArrayList cannot be cast to com.fr.stable.write.WriteCellAble

    点击展开更多

    问题描述:

    填报提交时出现报错:java.util.ArrayList cannot be cast to com.fr.stable.write.WriteCellAble

    原因分析:

    提交入库的数据中存在数组

    解决方案:

    检查并修正提交入库的数据

    data truncation,data too long for column

    点击展开更多

    问题描述:

    填报提交时出现报错:data truncation,data too long for column

    原因分析:

    数据库字段长度太短,填报入库的数据长度超过了限制

    解决方案:

    调大数据库字段长度

    将截断字符串或二进制数据

    点击展开更多

    问题描述:

    填报提交时出现报错:将截断字符串或二进制数据

    原因分析:

    数据库字段长度太短,填报入库的数据长度超过了限制

    解决方案:

    调大数据库字段长度

    No operations allowed after statement closed

    点击展开更多

    问题描述:

    填报提交时出现报错:No operations allowed after statement closed

    排查步骤一:

    数据库表设置了外键约束,例如restrict,此设置会影响填报。取消外键约束

    排查步骤二:

    账号权限问题,数据连接所用的用户只有查询权限,没有写入权限,请检查并修改对应的用户权限

    无法获取未定义或null引用的属性'formsubmit'

    点击展开更多

    问题描述:

    填报提交时出现报错:无法获取未定义或null引用的属性'formsubmit'

    原因分析:

    无法获取未定义或null引用的属性'XXX'是IE特有的报错,是老版本IE不兼容导致

    解决方案:

    建议升级IE浏览器版本,或更换为其他浏览器

    Unknown column 'Name' in 'field list'

    点击展开更多

    问题描述:

    填报提交时出现报错:Unknown column 'Name' in 'field list'

    原因分析:

    目标数据库不存在填报字段

    解决方案:

    修改填报属性的字段

    cannot change this transaction's access mode from read-only to update directly

    点击展开更多

    问题描述:

    填报提交时出现报错:cannot change this transaction's access mode from read-only to update directly

    原因分析:

    帆软默认的数据库隔离级别是可重复度,对于某些数据库来说太高了。

    解决方案:

    在 finedb 的 FINE_CONF_ENTITY 表中添加字段WriteOptimizationConfig.transactionRepeatableRead,字段值为false,即可将隔离级别调低。

    修改方式请参考:填报修改fine_conf_entity

    updates on append-only tables are not supported in serializable transactions

    点击展开更多

    问题描述:

    填报提交时出现报错:cannot change this transaction's access mode from read-only to update directly

    原因分析:

    帆软默认的数据库隔离级别是可重复度,对于某些数据库来说太高了。

    解决方案:

    在 finedb 的 FINE_CONF_ENTITY 表中添加字段WriteOptimizationConfig.transactionRepeatableRead,字段值为false,即可将隔离级别调低。

    修改方式请参考:填报修改fine_conf_entity

    数据列类型不匹配

    点击展开更多

    问题描述

    填报时有时候会遇到数据列类型不匹配的报错,如下图所示:

    原因分析

    第一种可能原因:确认下自己设置填报属性绑定单元格列值的时候有没有出错,如果错把数据库字段跟标题所在单元格绑定了会报这个错;

    第二种可能原因:看下数据库字段是不是 NUMBER 类型,数据库字段类型跟单元格数据类型不一致导致的。

    解决方案

    第一种原因:重新绑定数据库字段跟填报单元格;

    第二种原因:前端用数字控件,确保是数值类型符合数据库要求;或者将数据库字段修改成 VARCHAR2 类型。

    填报到MySQL数据库报错

    lock wait timeout exceeses ;try restarting transaction

    点击展开更多

    问题描述:

    填报提交时出现报错:lock wait timeout exceeses ;try restarting transaction

    原因分析:

    工程中同时填报人数较多,在高并发的情况下,Spring事物造成数据库死锁,后续操作超时抛出异常。

    Mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。

    解决方案一:杀死锁等待线程

    1)在MySQL中输入SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';查看锁等待时间,一般默认为50s
    2)在MySQL中输入select * from information_schema.innodb_trx语句查看锁等待的线程id

    3)执行kill 线程id,即可杀死该线程。

    解决方案二:修改锁等待时间

    例如修改锁等待时间为200s,可使用该语句:

    SET GLOBAL innodb_lock_wait_timeout=200;

    解决方案三:清理临时表

    对MySQL临时表数据进行清理

    Packet for query is too large

    点击展开更多

    问题描述:

    MySQL 数据库填报入库失败,报错Packet for query is too large ( 4739923 > 1948576). You can change this value on the server by setting the max_ allowed_ packet' variable

    原因分析:

    MySQL 数据库中「max_allowed_packet」值设置过小,导致单个记录超过限制后写入数据库失败,且后续记录写入也会失败。

    解决方案一:

    MySQL 安装目录下的「my.ini」文件中的[mysqld] 字段中的「max_allowed_packet = 1M」修改为 500M ,重启 MySQL 即可。

    解决方案二:

    1)使用「set global max_allowed_packet = 524288000;」 语句将「max_allowed_packet」的值设置为 500 M。

    2)使用「show VARIABLES like '%max_allowed_packet%';」 语句查看是否修改成功。

    Unknown column'??'in 'field list'

    点击展开更多

    问题描述:

    MySQL 数据库填报入库失败,报错:Unknown column'??'in 'field list'

    原因分析:

    编码问题,无法识别字段

    解决方案:

    在数据连接URL后面规定下编码方式?useUnicode=true&characterEncoding=UTF-8

    incorrect string value

    点击展开更多

    问题描述:

    数据填报到MySQL数据库,提交时报错「incorrect string value:'xf0x9f」

    原因分析:

    提交的数据中带有Emoji表情或者某些特殊字符,是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

    解决方案:

    修改mysql的my.ini文件:[mysqld]

    重启mysql服务后就可以正常插入了。

    Mysql提交慢

    点击展开更多

    问题描述

    同样的模板,其他数据库正常,只有Mysql数据库提交非常慢。

    原因分析

    Mysql默认禁用了批量提交。

    解决方案

    在数据连接的url后增加&rewriteBatchedStatements=true参数。

    填报到Oracle数据库报错

    ORA-00001 违反唯一约束条件(字段)

    点击展开更多

    问题描述:

    填报提交时出现报错:ORA-00001 违反唯一约束条件(字段)

    原因分析:

    Oracle数据库主键冲突报错

    解决方案:

    1)确认主键个数

    2)检查填报时是否有重复录入的情况

    ORA-00942:表或视图不存在

    点击展开更多

    问题描述:

    填报提交时出现报错:ORA-00942:表或视图不存在

    原因分析:

    1)填报的表/字段不存在/重命名了

    2)Oracle数据库大小写敏感,在定义表名称/列名称时,如果没有用引号引起来,Oracle会将其转换为大写,此时就会出现错误

    解决方案:

    检查填报入口的目标数据表是否发生了变更

    ORA-01031 权限不足

    点击展开更多

    问题描述:

    填报提交时出现报错:ORA-01031 权限不足

    原因分析:

    数据库设置了权限,限制了增删改sql语句的执行

    解决方案:

    给数据连接使用的用户赋权限

    ORA-01722

    点击展开更多

    问题描述:

    填报提交时出现报错:ORA-01722

    原因分析:

    填报字段类型不匹配,将字符串内容填报到了number类型的数据库字段中

    解决方案:

    修改数据库的字段类型

    ORA-12899: 列 "xxx" 的值太大

    点击展开更多

    问题描述:

    32 位十六进制数据(如GUID)填报到 RAW(16) 数据类型的字段时,报错「ORA-12899: 列 "xxx"."xxx"."xxx" 的值太大 (实际值: 32, 最大值: 16)」。如下图所示:


    原因分析:

    32 位十六进制字符串插入 RAW(16) 时,需要使用 hextoraw() 进行转换,但是通用 SQL 不好判断数据库列是否是 RAW(16) 类型,故无法直接应用 hextoraw 进行转换。

    解决方案:

    可以使用函数在入库前对需插入数据进行转换,所用函数可以通过自定义函数或者函数插件自定义,现提供一种自定义函数作为参考。自定义函数方法如下:

    1)设计器菜单栏点击「服务器>函数管理器」,自定义一个函数,命名为「transform」,点击「编辑」按钮,输入 Java 代码,点击「编译」按钮,编译成功后保存即可,步骤如下图所示:

    Java 代码如下:

    package com.fr.function;

    import com.fr.general.FArray;

    import com.fr.general.GeneralUtils;

    import com.fr.script.AbstractFunction;

    import com.fr.stable.ArrayUtils;

    import com.fr.stable.Primitive;

    import com.fr.stable.exception.FormulaException;

    public class Hex2Raw extends AbstractFunction {

        @Override    

    public Object run(Object[] objects) throws FormulaException {

            int len = ArrayUtils.getLength(objects);

            if (len == 0) {

                return Primitive.ERROR_VALUE;

            } 

    else if (len == 1) {

                Object item = objects[0];

                if (item instanceof FArray) {

                    FArray data = (FArray) item;

                    FArray<byte[]> result = new FArray<byte[]>();

                    for (Object el : data) {

                        result.add(parseHexString2ByteArray(GeneralUtils.objectToString(el)));

                    }

                    return result;

                } 

    else {

                    return parseHexString2ByteArray(GeneralUtils.objectToString(item));

                }

            }

     else {

                FArray<byte[]> result = new FArray<byte[]>();

                for (Object item : objects) {

                    result.add(parseHexString2ByteArray(GeneralUtils.objectToString(item)));

                }

                return result;

            }

        }

        public byte[] parseHexString2ByteArray(String hexStr) {

            if (hexStr.length() < 1)

                return new byte[0];

            byte[] result = new byte[hexStr.length() / 2];

            for (int i = 0; i < hexStr.length() / 2; i++) {

                // 两位为一组转为十进制

                int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);

                int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);

                // 转为十进制存入byte数组

                result[i] = (byte) (high * 16 + low);

            }

            return result;

        }

    }

    2)设置填报提交时,只需要将入库的值用公式转换下即可,如下图所示:

    ORA-28009

    点击展开更多

    问题描述:

    填报提交时出现报错:ORA-28009

    原因分析:

    填报对应数据连接的用户是sys,sys是数据库内设的超用户

    解决方案:

    请将数据连接的用户名修改为sys as sysdba

    填报到其他数据库报错

    ERRORCODE=-4229,SQLSTATE=null

    点击展开更多

    问题描述:

    DB2数据库填报入库失败,报错:ERRORCODE=-4229,SQLSTATE=null

    排查步骤一:

    原因分析:数据库字段设置禁止为空,但是填报的数据中存在空值

    解决方案:避免填报空值

    排查步骤二:

    原因分析:char字段类型导致,char是定长数据类型,数据库会自动补上空格,导致入库内容与填报内容不一致,从而报错

    解决方案:更改为varchar字段

    排查步骤三:

    原因分析:数据库表状态异常/表被锁住

    解决方案:检查数据库表状态

    批次处理xxx被中止,呼叫 getNextException 以取得原因

    点击展开更多

    问题描述:

    postgresql数据库填报入库失败,报错:批次处理xxx被中止,呼叫 getNextException 以取得原因

    原因分析:

    不支持postgresql的interval字段类型填报

    解决方案:

    字段类型修改为varchar(n)

    JZ006: 捕获到 IO 例外:java.io.IOException

    点击展开更多

    问题描述:

    填报提交时出现报错:JZ006: 捕获到 IO 例外:java.io.IOException

    原因分析:

    填报提交的目标数据库为IQ数据库/sybase数据库,且填报提交数据条数大于1000条

    解决方案:

    填报模板预览链接URL后面加上&jconnect_version=6

    Cannot parallelize an UPDATE statement that updates the distribution column

    点击展开更多

    问题描述:

    填报提交时出现报错:Cannot parallelize an UPDATE statement that updates the distribution column

    原因分析:

    填报提交的目标数据库为GP数据库

    1)此次填报提交对数据库的主键造成了更新操作

    2)数据库主键为自增长ID,不应当在填报属性中设置该主键字段

    解决方法:

    1)检查是否对数据库的主键做了更新操作

    2)检查数据库主键是否为自增长id,是的话不需要在填报属性中设置该字段

    parameter metadata not populated

    点击展开更多

    问题描述:

    填报提交时出现报错:parameter metadata not populated

    原因分析:

    impala不支持填报,因为数据库本地不支持修改和更新数据

    Could not commit to Dtabase:tmp Error to commit

    点击展开更多

    问题描述:

    填报提交时可以入库,但是会出现报错:Could not commit to Dtabase:tmp Error to commit

    原因分析:

    填报提交的目标数据库为星环数据库

    用户在数据库创建表的时候,创建的是ORC事务表。

    默认情况下Inceptor关闭Transaction Mode,要对ORC表进行事务处理。

    用户需要通过设置参数打开ORC表对应的Transaction Mode。

    解决方案:

    在对应数据连接的URL后面拼接?transaction.type=inceptor,再去执行填报提交就正常了

    Error, you should set transaction.type before any DCL statement

    点击展开更多

    问题描述:

    填报提交时可以入库,但是会出现报错:Error, you should set transaction.type before any DCL statement

    原因分析:

    填报提交的目标数据库为星环数据库

    用户在数据库创建表的时候,创建的是ORC事务表。

    默认情况下Inceptor关闭Transaction Mode,要对ORC表进行事务处理。

    用户需要通过设置参数打开ORC表对应的Transaction Mode。

    解决方案:

    在对应数据连接的URL后面拼接?transaction.type=inceptor,再去执行填报提交就正常了

    ClickHouse exception, code: 62

    点击展开更多

    问题描述:

    填报提交时出现报错:ClickHouse exception, code: 62

    原因分析:

    填报提交的目标数据库为Clickhouse数据库

    Clickhouse数据库本身不支持 UPDATE 和 DELETE 操作

    解决方案:

    填报提交类型改成插入

    Query must be like 'INSERT INTO xxx'.Got: UPDATE default

    点击展开更多

    问题描述:

    使用 Clickhouse 数据库进行填报时,点击「提交」会弹出一个报错,如下图所示:


    原因分析:

    Clickhouse 数据库 UPDATE 和 DELETE 操作和常规的数据库删改语法不同,不支持使用。

    支持使用的语法格式可参考 报表填报属性简介 2.1节。

    解决方案:

    设置「报表填报属性」时,提交类型选择「插入提交」。

    INSERT in transaction is not supported now

    点击展开更多

    问题描述:

    使用阿里云的 hologres 产品(类似数据库),可正常查询数据,但是填报使用「内置SQL」提交类型时,点击「提交」会弹出一个报错,如下图所示:


    原因分析:

    hologres 产品本身不支持事务中执行 insert 语句。

    解决方案:

    填报提交的时候使用「自定义提交」方式,通过写代码的方式执行 insert 语句。 

    ADB数据库智能提交无法插入数据

    点击展开更多

    问题描述:

    阿里云的ADB数据库使用智能提交时,无法新增数据。使用插入提交正常。

    原因分析:

    ADB3.0以上版本更新了数据库机制,导致本应该插入的数据在返回影响行数的时候,从0变为了1,所以后续就不会执行插入了。

    解决方案:

    在ADB的console里找到RC_UPDATE_AUTO_CONVERT_ENABLE参数,将其设置为false即可。如果没有该参数,则需要手动添加。


    附件列表


    主题: 填报应用
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持