DataWeave中oracle.sql.timestamp转java.sql.timestamp方法及报错解决
解决方案:Oracle Timestamp 转 Java Timestamp/DataWeave 日期类型
核心错误原因
你遇到的「Cannot coerce array to date/string」错误,本质是迭代变量引用错误:在map操作里,你用了payload.doj,但payload是整个输入数组,payload.doj会提取数组中所有元素的doj字段形成一个新数组,自然无法直接转成单个日期/字符串。正确的引用应该是当前迭代的object.doj。
正确转换代码
根据需求,提供三种常用转换方案:
方案1:直接转为DataWeave Date类型
Payload map(object, index) -> { DOJ: object.doj as Date }
oracle.sql.Timestamp可以直接被DataWeave识别并转换为内置的Date类型,无需额外格式处理。
方案2:显式转为java.sql.Timestamp类型
如果需要输出严格的java.sql.Timestamp对象(比如后续对接Java组件),可以直接指定目标类型:
Payload map(object, index) -> { DOJ: object.doj as java.sql.Timestamp }
方案3:先转字符串再转日期(针对特殊格式场景)
如果确实需要通过字符串中间转换(比如自定义日期格式),注意修正变量引用并补全格式字符串的闭合引号:
Payload map(object, index) -> { DOJ: (object.doj as String {format: "yyyy-MM-dd HH:mm:ss"}) as DateTime }
注意:格式字符串要和
oracle.sql.Timestamp转字符串后的实际格式匹配,避免转换失败。
验证说明
修正变量引用后,object.doj指向的是单个oracle.sql.Timestamp对象,而非数组,此时类型转换就能正常执行,不会再出现数组转日期/字符串的错误。
内容的提问来源于stack exchange,提问作者aruna muruganandam
相关产品推荐
相关产品推荐

