Oracle 11g JSON库小于1的小数输出出错BUG 修复《JSON_UTIL_PKG》
来源:互联网 发布:网络地板防静电吗 编辑:程序博客网 时间:2024/06/03 21:43
Oracle 11 中JSON数据的处理,采用的主要是第三方的JSON处理来实现,其中一个库JSON_UTIL_PKG,提供了两个函数:
-- generate JSON from REF Cursorfunction ref_cursor_to_json (p_ref_cursor in sys_refcursor, p_max_rows in number := null, p_skip_rows in number := null) return json_list;-- generate JSON from SQL statementfunction sql_to_json (p_sql in varchar2, p_max_rows in number := null, p_skip_rows in number := null) return json_list;
这两个函数的本质是一样的,一个将cursor数据返回,另一个是动态SQL语句,查询后返回结果列表,但从安全与开发的角度讲,使用CURSOR会更安全和方便一点,动态SQL语句则有一定的潜在风险。
BUG/BUG/BUG:
但我们发现这个方法在使用的时候,如果某字段的值为小于1的一个浮点数时,就会可能报错。经查看其内部实现时候,我们发现,它在转换时候采用的方法是:先将结果数据按XSL模板,转换成XML数据格式,再从XML格式中将数据提取转换成JSON格式。
在转换成XML时候,小于1的数字会去掉前面的0,所以在做转换成JSON时,解析报错。
找到问题原因即可修改,找到其数字处理定义部分:
<xsl:template match="text()[not(string(number())='NaN' or ( starts-with(.,'0' ) and . != '0' and not(starts-with(.,'0.' )) ) or ( starts-with(.,'-0' ) and . != '-0' and not(starts-with(.,'-0.' )) ) )]"> <xsl:value-of select="."/> </xsl:template>
改为自动补0:如果是小数且没有前置0的话,就补0,否则就原样输出不变,确保不出错:
<xsl:template match="text()[not (string(number())='NaN')]"> <xsl:choose> <xsl:when test="starts-with(., '.')"> <xsl:value-of select="concat('0', .)"/> </xsl:when> <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise> </xsl:choose> </xsl:template>
到此整个修改完成,重新编译或另存成一个包(我就是这样做了^&^)
Q:380105206
0 0
- Oracle 11g JSON库小于1的小数输出出错BUG 修复《JSON_UTIL_PKG》
- Oracle 11g R2 补丁修复的bug list
- oracle 11g的一个bug
- oracle小于1的小数在jsp上显示不完整处理
- ORACLE 11g 断电重启报错的相关修复
- ORACLE 11G DataGuard Failover后如何修复standby库
- Java 处理Oracle数据对于小于1的小数,小数点前面的0是不显示的。
- ORACLE 11G 如何修改 awr 的保留期限小于8天
- oracle 11g ora-00979 bug的处理
- oracle 11g dblink 查询的bug --10053用处
- Oracle 11g bug:8730312 kewastUnPackStats() : bad magic 1
- oracle的bug(包括10G)
- 【Oracle故障】Oracle 11g通过ABMR自动修复坏块的方法
- Win 7中的oracle 11g的TNS-12545错误修复
- bug的修复
- 修复bug的思考
- ORACLE 11G通过SCN做增量备份修复standby库详细过程
- Oracle 11G DataGuard ORA-16086问题修复详细过程
- 快速排序 Java实现-数组-链表
- 使用svn diff的-r参数的来比较任意两个版本的差异
- Android自动填充短信验证码
- 字节码增强和AOP
- Java反射整理
- Oracle 11g JSON库小于1的小数输出出错BUG 修复《JSON_UTIL_PKG》
- Asp.Net 中 TextBox的TextBoxMode为多行时MaxLength无效
- Unity Shader 效果学习
- java学习笔记(六)
- 添加.gif图
- 用jQuery设置href内容为空点击删除一行
- mysql skip-grant-tables 添加用户报错 ERROR 1290
- R语言绘图渐进
- Java NIO系列教程(六) Selector