在 PL/SQL 触发器中查找 JSON 数组的长度

Finding length of JSON array in PL/SQL Trigger

我正在尝试使用 Application Express 在 Oracle 12c 中以编程方式查找 PL/SQL 触发器中 JSON 数组的长度。这将允许我遍历每个元素并将数据插入另一个 table。现在 JSON 作为 CLOB 存储在列中,我正在将其转换为 VarCHAR2。代码如下:

declare
    json CLOB;
    json_varchar VARCHAR2(32767);
    json_member WWV_FLOW_T_VARCHAR2;
begin
    json := :new.ORDER_SKU;
    json_varchar := CAST(json AS VARCHAR2);
    apex_json.parse (json);
    json_member := APEX_JSON.get_members(p_path=>'order_sku');
    FOR i IN 1..json_member.count
    LOOP
    ...
    END LOOP;
end;

当 运行 这个触发器时,我收到以下错误:

SQL Error Message: ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "APEX_050100.WWV_FLOW_JSON", line 1597
ORA-06512: at "TriggerName", line 9
ORA-04088: error during execution of trigger 'TriggerName'
ORA-06512: at line 6`

我想我应该使用不同的方法来查找 JSON 数组的长度,但我无法通过文档或堆栈溢出找到任何内容。

此外,如果有帮助,JSON 以以下形式存储:

{
"order_sku":[{"sku1":"details"},{"sku2":"details"}]
}

因为你使用的是 12c 版本,我同意@alexgibbs,因为你应该看看 json_table 如果你真的想使用 apex_json 你不需要将你的 clob 转换为 varchar你可以做类似

的事情
DECLARE
 l_json CLOB := '{"order_sku":[{"sku1":"details"},{"sku2":"details"}] }';
 j apex_json.t_values;
 l_path  VARCHAR2(100);

BEGIN
 apex_json.parse(j, l_json);

 FOR i IN 1..apex_json.get_count(p_values => j, p_path   => 'order_sku')
 LOOP
   -- if your sku tag could be always the same "sku" you would not need the following line
   l_path := 'order_sku[%d].' || apex_json.get_members(p_values => j, p_path => 'order_sku[%d]', p0 => i)(1);

   -- replace with the insert you want to do
   dbms_output.put_line(apex_json.get_varchar2(p_values => j, p_path => l_path, p0 => i));

 END LOOP;

END;