【问题标题】:Can We get sum of list attributes in oracle without loop?我们可以在没有循环的情况下在 oracle 中获得列表属性的总和吗?
【发布时间】: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 - “无效号码” *原因:指定的号码无效。 *操作:指定一个有效的数字。

【问题讨论】:

    标签: json oracle plsql oracle12c


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2015-03-23
      相关资源
      最近更新 更多