历史版本5 :填报常见报错 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 填报到 RAW(16) 字段提交失败编辑
1.1 问题描述
32 位十六进制数据(如GUID)填报到 RAW(16) 数据类型的字段时,报错ORA-12899: 列 "xxx"."xxx"."xxx" 的值太大 (实际值: 32, 最大值: 16),如下图所示:
1.2 原因分析
32 位十六进制字符串插入 RAW(16) 时,需要使用 hextoraw() 进行转换,但是通用 SQL 不好判断数据库列是否是 RAW(16) 类型,故无法直接应用 hextoraw 进行转换。
1.3 解决方案
可以使用函数在入库前对需插入数据进行转换,所用函数可以通过自定义函数或者函数插件自定义,现提供一种自定义函数作为参考。自定义函数方法如下:
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;
/**
* @description: 将十六进制转为Oracle raw(16)
* @author: Jimmy.Zheng
* @create: 2020-07-14 14:28
*/
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)设置填报提交时,只需要将入库的值用公式转换下即可,如下图所示:
2. 警告信息:停止运行此脚本吗?编辑
2.1 问题描述
填报时弹出警告信息:停止运行此脚本吗?此页面上的脚本造成 Web 浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。如下图所示:
2.2 原因分析
弹出如上对话框有两种原因:一种是模板中包含大量公式,另一种是模板中有大量用于填报的控件。
2.3 解决方案
2.3.1 优化模板
1)
2)