首页 > 解决方案 > oracle表单12c中的Json_table函数

问题描述

我对甲骨文形式相当陌生。我需要使用 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.

标签: oracleplsqloracleforms

解决方案


对于最新版本的 Forms( 10 , 11 ),即使是显式连接也不可能在表单中进行。因此,您宁愿将查询放入数据库中的存储过程中,例如

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触发器调用。


推荐阅读