我们可以在没有循环的情况下在 oracle 中获得列表属性的总和吗?
Posted
技术标签:
【中文标题】我们可以在没有循环的情况下在 oracle 中获得列表属性的总和吗?【英文标题】:Can We get sum of list attributes in oracle without loop? 【发布时间】:2020-06-21 03:06:54 【问题描述】:我们可以得到下面列表中所有小时的总和吗?我正在使用带有 JSON_QUERY 函数的 sum 函数,但出现错误。
SET SERVEROUT ON
DECLARE
data varchar2(200);
JSONSTRING VARCHAR2(4000):= ' "Implement_Details": [
"Hours": "100",
"Implement1": "Laser Leveler"
,
"Hours": "400",
"Implement1": "Trolley"
,
"Hours": "100",
"Implement1": "Cultivator"
]';
BEGIN
SELECT SUM(JSON_QUERY(JSONSTRING, '$.Implement_Details[*].Hours' WITH ARRAY WRAPPER)) INTO DATA
FROM dual;
DBMS_OUTPUT.PUT_LINE(data);
end;
预期输出:
100 + 400 + 100 = 600
错误报告 - ORA-01722:无效号码 ORA-06512:在第 20 行 01722. 00000 - “无效号码” *原因:指定的号码无效。 *操作:指定一个有效的数字。
【问题讨论】:
【参考方案1】:您不能在整个 ARRAY 上使用 SUM()
。
我所做的是将Hours
转换为表格并在列上使用SUM()
,就像您通常在SELECT
子句中使用的那样。
SET SERVEROUT ON
DECLARE
data varchar2(200);
JSONSTRING VARCHAR2(4000):= ' "Implement_Details": [
"Hours": 100,
"Implement1": "Laser Leveler"
,
"Hours": 400,
"Implement1": "Trolley"
,
"Hours": 100,
"Implement1": "Cultivator"
]';
BEGIN
SELECT SUM(value) INTO DATA
FROM JSON_TABLE((JSON_QUERY(JSONSTRING, '$.Implement_Details[*].Hours' WITH ARRAY WRAPPER)), '$[*]' COLUMNS (value PATH '$'));
DBMS_OUTPUT.PUT_LINE(data);
end;
【讨论】:
以上是关于我们可以在没有循环的情况下在 oracle 中获得列表属性的总和吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有任何视图或任何其他表类型的情况下在 oracle 中创建具有动态列名和动态数据类型的动态表
有没有办法在没有 for 循环的情况下在 numpy 中实现重复?
如何在没有警报消息(iOS)的情况下在 webview 中获得地理定位许可?