今天在测试Oracle的Json函数时,发现了一个非常怪异的现象。
首先介绍今天的主角,Oracle Json函数 json_query()
json_query主要对Json字符串进行查询操作,可以指定json_path路径去遍历json对象中的某个节点。
例如:
select json_query(t.value_schema, '$')
from (
select '{"name": "Mike"}' value_schema from dual
) t;
此查询可取出整个json对象:
{"name": "Mike"}
然而好玩的事情来了:
select json_query(t.value_schema, '$')
from (
select '{"name": "Mike"}' value_schema from dual union all
select '{"name": "Kite"}' value_schema from dual
) t;
当增加了一行name为Kite的记录后,再执行上面这个SQL却发生报错:
ORA--00932: 数据类型不一致:应为 -,但却获得 CHAR
这确实很奇怪,如果修改Kite的名字为Kite+空格、Kite1等,都不会出现报错。
所以,Kite到底发生了什么?难道是不经意间发现了一个Oracle的未解之谜?
具体原因目前还不清楚,或许,又是一个程序员与糟心女友的悲伤故事,导致了一个致命Bug?