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

Oracle APEX:如何从JSON读取色值并显示到颜色选择器

解决Oracle APEX颜色选择器读取JSON配置值的问题

问题根源

你当前存储的JSON格式无效:颜色值#fd1313这类没有用双引号包裹,Oracle的JSON解析函数无法正常识别,这是导致读取失败的核心原因之一。

步骤1:修正存储的JSON格式

1.1 确保新存储的JSON是有效的

修改存储逻辑,将颜色值转为字符串格式,正确的JSON示例:

{"attention": "#fd1313", "property": "#ea00ff", "not_reported": "#0004ff", "off_property": "#00ffe1", "carts_in_use": "#1eff00", "carts_idle": "#ffd500"}

1.2 修复已存在的错误数据

如果USR表中已有无效JSON,执行以下SQL修正:

UPDATE USR
SET setting_pref = REGEXP_REPLACE(setting_pref, '(#[\da-fA-F]{6})', '"\1"')
WHERE setting_pref IS NOT NULL;
COMMIT;

步骤2:正确读取JSON值到颜色选择器

以下两种方法任选其一:

方法1:直接在组件Source中使用JSON_VALUE

针对每个颜色选择器组件,在Source配置区的SQL Query中填写:

SELECT JSON_VALUE(setting_pref, '$.attention') FROM USR WHERE user_id = :APP_USER;
  • 替换$.attention为对应键名(比如$.property对应property颜色项)
  • 替换user_id = :APP_USER为你的实际用户匹配条件(比如用户名、用户ID字段)

方法2:通过页面流程批量赋值

  1. 为每个颜色选择器创建对应页面项(比如P_ATTENTION_COLOR、P_PROPERTY_COLOR等)
  2. 在页面的Before Header区域添加一个PL/SQL Process,代码如下:
DECLARE
    l_pref CLOB;
BEGIN
    -- 读取当前用户的配置
    SELECT setting_pref INTO l_pref 
    FROM USR 
    WHERE user_id = :APP_USER;

    -- 解析JSON并赋值给页面项
    :P_ATTENTION_COLOR := JSON_VALUE(l_pref, '$.attention');
    :P_PROPERTY_COLOR := JSON_VALUE(l_pref, '$.property');
    :P_NOT_REPORTED_COLOR := JSON_VALUE(l_pref, '$.not_reported');
    :P_OFF_PROPERTY_COLOR := JSON_VALUE(l_pref, '$.off_property');
    :P_CARTS_IN_USE_COLOR := JSON_VALUE(l_pref, '$.carts_in_use');
    :P_CARTS_IDLE_COLOR := JSON_VALUE(l_pref, '$.carts_idle');
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        -- 用户无配置时设置默认值
        :P_ATTENTION_COLOR := '#fd1313';
        :P_PROPERTY_COLOR := '#ea00ff';
        :P_NOT_REPORTED_COLOR := '#0004ff';
        :P_OFF_PROPERTY_COLOR := '#00ffe1';
        :P_CARTS_IN_USE_COLOR := '#1eff00';
        :P_CARTS_IDLE_COLOR := '#ffd500';
END;
  1. 将每个颜色选择器的Source设为Static Value,并绑定对应的页面项。

关键检查点

  • 确认颜色选择器的Format属性设置为Hex Color,确保组件能正确识别#开头的颜色代码。
  • 确认USR表的setting_pref列类型为CLOB或足够长度的VARCHAR2(比如VARCHAR2(4000))。
  • 验证查询条件的正确性,确保只返回当前用户的一行数据,避免因多行导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:20:32