表单中超长字符串保存报错

适用版本

  1. [[Oracle APEX19.2]]
  2. APEX补丁版本 19.2.0.00.16

背景

在表单中输入超过4000字符时,保存操作会报错。以下是针对该问题的详细分析与解决方案。

OsXM1-2025-11-20-15-28-22

问题

当用户尝试保存超过4000字符的备注信息时,系统抛出错误。为了验证数据是否正确获取,我们进行了以下测试:

1
2
3
4
5
BEGIN
    apex_debug.warn('---------');
    apex_debug.warn(length(:P120_REMARK));
    apex_debug.warn('---------');
END;

通过上述代码,我们确认了数据确实被正确获取,但插入操作仍然失败。这表明问题可能出在平台自带的增删改查处理逻辑上。
OsXM1-2025-11-20-15-44-18

解决方案

首先,我们尝试调整字段长度,将REMARK字段从VARCHAR2(4000)修改为更大的容量,例如VARCHAR2(30000)。如果数据库不支持大于4000的VARCHAR2类型,则增加一个CLOB列来存储长文本。

1
2
3
ALTER TABLE  DEMO666_CONF_ENV MODIFY REMARK varchar2(30000);
-- 如果数据库不支持大于4000 则增加一个clob列,其他跟varchar2类似
ALTER TABLE  DEMO666_CONF_ENV add REMARK_clob clob;

尽管调整了字段长度,问题依旧存在。因此,我们决定手动拆分保存处理过程,以确保每一步都能正常执行。以下是具体的实现步骤:
OsXM1-2025-11-20-17-44-03

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
DECLARE
BEGIN
    IF :REQUEST = 'CREATE' THEN
        INSERT INTO DEMO666_CONF_ENV (env_type, env_key, env_value, remark)
        VALUES (:P120_ENV_TYPE,
                :P120_ENV_KEY,
                :P120_ENV_VALUE,
                :P120_REMARK)
        RETURNING id INTO :P120_ID;
    ELSIF :REQUEST = 'SAVE' THEN
        UPDATE DEMO666_CONF_ENV
        SET ENV_TYPE  = :P120_ENV_TYPE,
            ENV_KEY   = :P120_ENV_KEY,
            ENV_VALUE = :P120_ENV_VALUE,
            REMARK    = :P120_REMARK
        WHERE id = :P120_ID;
    END IF;
END;

通过这种方式,我们成功地替换了平台自带的增删改查处理逻辑,解决了超长文本保存的问题。

显示优化

为了改善用户体验,我们将显示的备注信息截断为前200个字符,并提供一个链接,点击后可以查看完整的备注内容。以下是查询语句和弹框页的实现: OsXM1-2025-11-20-16-02-12

查询语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT ID,
       ENV_TYPE,
       ENV_KEY,
       ENV_VALUE,
       SUBSTR(REMARK, 1, 200) AS REMARK,
       CREATED,
       CREATED_BY,
       UPDATED,
       UPDATED_BY
FROM DEMO666_CONF_ENV;

弹框页(P122)PL/SQL 动态内容

新增区域类型为 PL/SQL 动态内容,并新增页项 P122_ID

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
DECLARE
    v_C varchar2(30000);
    v_v clob;
BEGIN
    SELECT REMARK AS REMARK
    INTO v_C
    FROM DEMO666_CONF_ENV
    WHERE id = :P122_ID;
    htp.P(htf.escape_sc(v_C));-- 注意这里可能存在安全问题
END;

OsXM1-2025-11-20-16-12-14

通过以上方法,我们不仅解决了超长文本保存的问题,还优化了显示效果,提升了用户体验。至此,所有相关的增删改查操作都已逐一拆分并实现,确保系统的稳定性和可靠性。

这是一个脚注 1


  1. 参考文献1:  ↩︎

Licensed under CC BY-NC-SA 4.0
最后更新于 2025-12-02 18:51
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计