oracle表单12c中的Json_table函数

Posted

技术标签:

【中文标题】oracle表单12c中的Json_table函数【英文标题】:Json_table function in oracle forms 12c 【发布时间】:2020-11-24 12:45:13 【问题描述】:

我对 oracle 表单相当陌生。我需要使用 json_table 函数。当我运行以下查询时,我收到下面提到的错误消息。但是当我在 sql developer 中运行相同的查询时,它可以工作。如果有人可以帮助我找出相同的根本原因,那就太好了。谢谢。

SELECT RPTD.GROUP_TODO_ID,
       query_json.event_id
  into :GLOBAL.RVS_ID,:GLOBAL.RV_EV_ID
  FROM RGTD ,
       RPTD
      ,json_table(RGTD.REVSHARE_INFO, '$' COLUMNS ( NESTED PATH '$.revenueShareFunds[*]' COLUMNS ( ID 
                  VARCHAR2(10) PATH '$.rapId' , EVENT_ID VARCHAR2(12) PATH '$.revenueShareEventId'))) 
                  query_json
  WHERE QUERY_JSON.ID = 'xxxxx'
    AND RGTD.ID             = RPTD.GROUP_TODO_ID
    AND rownum              =1;

我在编译 12c oracle 表单时遇到错误:

Compiling PRE-QUERY trigger on REVSHARE_PART_TO_DO data block...
Compilation error on PRE-QUERY trigger on REVSHARE_PART_TO_DO data block:
PL/SQL ERROR 103 at line 23, column 95
Encountered the symbol ";" when expecting one of the following:

) , * & = - + < / > at in is mod remainder not rem =>
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
The symbol ")" was substituted for ";" to continue.

【问题讨论】:

【参考方案1】:

对于最新版本的表单(1011),即使是在表单中也无法进行显式连接。因此,您可以将查询放入数据库中的存储过程中,例如

CREATE OR REPLACE PROCEDURE Get_ID_Values( 
                                           i_json_id  IN  VARCHAR2, 
                                           o_rvs_id   OUT rptd.group_todo_id%type, 
                                           o_rv_ev_id OUT VARCHAR2, 
                                           o_error    OUT VARCHAR2 
                                          ) 
AS
BEGIN
    SELECT rptd.group_todo_id, query_json.event_id
      INTO o_rvs_id, o_rv_ev_id
      FROM rgtd
      JOIN rptd
        ON rgtd.id = rptd.group_todo_id
     CROSS JOIN json_table(rgtd.revshare_info,
                      '$' COLUMNS(NESTED PATH '$.revenueShareFunds[*]'
                              COLUMNS(id VARCHAR2(10) PATH '$.rapId',
                                      event_id VARCHAR2(12) PATH
                                      '$.revenueShareEventId'))) query_json
     WHERE query_json.id = i_json_id
       AND rownum = 1;
  EXCEPTION WHEN no_data_found THEN o_error := 'No Data Found';
            WHEN   others      THEN o_error := sqlerrm;      
END;
/

全部从当前的PRE-QUERY 触发器调用。

【讨论】:

嗨@Barbaros 遇到同样的错误,我正在使用 oracle 12c @VimalBhaskar 你能用代码编辑问题如何从触发器调用存储过程吗?

以上是关于oracle表单12c中的Json_table函数的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql中的JSON_TABLE未捕获嵌套的json数据

Oracle 12c JSON TABLE 解析错误处理

JPA 标准 API 和 Oracle JSON_TABLE 函数

Oracle 12c 子查询的 WITH 子句中的函数

如何在oracle表单12c中为Shift + A按键创建触发器

MariaDB 是不是具有 MYSQL/Oracle JSON_TABLE 的可扩展等效项