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

Oracle Forms 14c使用JSON_ARRAYAGG提示未声明的问题咨询

Oracle Forms 14c中使用JSON_ARRAYAGG报错的解决方案

1. Oracle Forms 14c与JSON函数的兼容性问题

存在兼容性问题。Oracle Forms自带的客户端PL/SQL解析器对数据库原生JSON函数的支持滞后于数据库版本。JSON_ARRAYAGG属于数据库端的SQL函数,直接在Forms的PL/SQL块中调用时,Forms本地解析器无法识别该标识符,因此抛出"identifier JSON_ARRAYAGG must be declared"错误,即便数据库(19c)本身完全支持该函数。

2. 是否需要启用特定设置或库?

无需额外启用特定库或配置项。问题核心在于代码执行上下文:Forms的本地PL/SQL解析器不识别该函数,只要将JSON生成逻辑转移到数据库端执行即可,无需修改Forms的全局设置。

3. Oracle Forms中使用JSON功能的解决方法

  • 封装数据库存储过程/函数:将JSON生成逻辑放到数据库端的存储过程或函数中,在Forms里直接调用该数据库对象。
    示例数据库函数:

    CREATE OR REPLACE FUNCTION get_dept_emp_json(p_dept_id NUMBER) RETURN CLOB IS
      l_json CLOB;
    BEGIN
      SELECT JSON_ARRAYAGG(
               JSON_OBJECT(
                 'id' VALUE employee_id,
                 'name' VALUE first_name
               )
             ) INTO l_json
      FROM hr.EMPLOYEES
      WHERE department_id = p_dept_id;
      RETURN l_json;
    END;
    

    Forms中调用:

    DECLARE
      l_json CLOB;
    BEGIN
      l_json := get_dept_emp_json(10);
    END;
    
  • 使用动态SQL执行:通过EXECUTE IMMEDIATE将查询直接发送到数据库端解析执行,绕过Forms的本地PL/SQL解析器。
    示例代码:

    DECLARE
      l_json CLOB;
    BEGIN
      EXECUTE IMMEDIATE 'SELECT JSON_ARRAYAGG( JSON_OBJECT( ''id'' VALUE employee_id, ''name'' VALUE first_name ) ) FROM hr.EMPLOYEES WHERE department_id = :dept'
        INTO l_json
        USING 10;
    END;
    
  • 数据块+客户端拼接(不推荐):通过Forms数据块查询出目标数据,再在客户端PL/SQL中手动拼接JSON字符串。此方法仅适用于数据量小的场景,效率低且易出错。

内容的提问来源于stack exchange,提问作者Ahmed Al-Majidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:16:01