You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex表单提交报错ORA-01847:合规日期仍报错求助

解决ORA-01847错误的步骤

这个问题我之前也碰到过,大概率是Apex在提交时解析日期字符串的格式和你显示的格式不匹配导致的——哪怕你看到的日期看起来合法,但Oracle可能在用不同的规则解析它。咱们一步步来解决:

1. 调整选择列表的返回值设计

你的查询现在返回格式化后的日期字符串作为显示值、id作为返回值。如果表单是要把选中的日期保存到DATE类型字段里,这个逻辑就有问题:返回的id是数字,但表单字段可能在尝试把这个数字当成日期字符串解析,自然会报错。

正确的做法是让选择列表:

  • 显示值用格式化后的日期字符串(方便用户识别)
  • 返回值用原始的data字段(DATE类型,让Apex直接处理日期值,跳过字符串解析环节)

修改后的查询:

SELECT to_char(data, 'DD/MM/YYYY HH24:MI') AS display_value,
       data AS return_value
FROM seanse
WHERE id_film = :P15_TYTUL;

2. 匹配表单项的日期格式掩码

如果你的表单项是Date Picker或Date类型,一定要确保它的Format Mask设置为DD/MM/YYYY HH24:MI,和你查询里的日期格式完全一致。这样Apex在提交时就能正确识别返回的日期值。

设置路径:编辑表单项 → 找到「Formatting」区域 → 填写Format Mask为DD/MM/YYYY HH24:MI

3. 显式指定日期转换格式(若必须用字符串返回值)

如果因为业务限制必须返回字符串作为选择列表的返回值,那在保存到数据库时,一定要显式指定日期格式,不要依赖Oracle的会话默认格式。比如在表单的处理Process中用TO_DATE函数转换:

INSERT INTO your_target_table (date_column)
VALUES (TO_DATE(:P15_YOUR_DATE_ITEM, 'DD/MM/YYYY HH24:MI'));

这样不管会话的日期格式是什么,都能正确解析字符串。

4. 排查是否绑定了错误字段

最后再检查一遍:你的表单项是不是错误地绑定了选择列表的返回值?比如如果选择列表返回的是id,但你把这个id赋值给了DATE类型字段,Oracle会把数字id当成日期字符串解析,必然触发ORA-01847错误。这种情况下,要么调整选择列表返回日期值,要么通过id查询对应的data字段再赋值。


内容的提问来源于stack exchange,提问作者e_cinema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:37:40