在 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;
我正在尝试使用 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;