我们可以在没有循环的情况下在 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 中实现重复?

如何在没有循环依赖的情况下在 GraphQL 中拆分模式?

如何在没有警报消息(iOS)的情况下在 webview 中获得地理定位许可?

如何在没有 useMutation 的情况下在 Next.js 中使用 GraphQL 突变

oracle forms 12c我可以在没有客户端安装的情况下在互联网上获取应用程序吗?