Oracle 19c带FORMAT JSON的JSON_OBJECT查询报ORA-00932错误的解决
ORA-00932错误原因及解决方法
错误原因
FORMAT JSON子句用于告知Oracle,JSON_OBJECT的VALUE部分是已有的JSON格式内容,但它要求对应的值必须是Oracle兼容的JSON类型(比如原生JSON数据类型、或通过JSON()/JSON_OBJECT()等构造函数生成的JSON对象)。你当前传入的是普通字符串(CHAR类型),Oracle无法将其识别为符合要求的UDT(用户定义类型,此处特指JSON相关类型),因此触发ORA-00932: inconsistent datatypes: expected UDT got CHAR错误。
解决方法
有两种可行的调整方式:
方式1:将字符串转为JSON类型
使用JSON()函数把你的JSON格式字符串包装成Oracle原生JSON类型,满足FORMAT JSON的类型要求:
SELECT JSON_OBJECT( KEY 'Entities' VALUE JSON('{ "Entities": { "Formula": "FormulaHandling", "Lookup_IsoUnit": "FormulaHandling", "FormulaItem": "FormulaHandling" } }') FORMAT JSON ) FROM dual;
方式2:直接构造嵌套JSON_OBJECT(更规范)
避免传入字符串,直接用JSON_OBJECT嵌套构造目标JSON结构,无需依赖FORMAT JSON,同时避免类型问题:
SELECT JSON_OBJECT( KEY 'Entities' VALUE JSON_OBJECT( KEY 'Entities' VALUE JSON_OBJECT( KEY 'Formula' VALUE 'FormulaHandling', KEY 'Lookup_IsoUnit' VALUE 'FormulaHandling', KEY 'FormulaItem' VALUE 'FormulaHandling' ) ) ) FROM dual;
内容的提问来源于stack exchange,提问作者Mayura
相关产品推荐
相关产品推荐

