Oracle12C中怎么写能读取到JSON字符串中的数组rows的长度?

非著名魔兽解说 发布于 2016/09/17 11:30
阅读 670
收藏 1

@IdleMan 你好,想跟你请教个问题:

Oracle12C中如何读取输入参数JSON字符串中的数组长度?

读取数组中第一个元素的LinkOrderNumber我知道是这样写:


DECLARE lnum VARCHAR2(100);
BEGIN
SELECT JSON_VALUE('{
    "total": 2,
    "rows": [
        {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 1,
            "DeleteFlag": 0
        },
         {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 2,
            "DeleteFlag": 0
        }
    ],
    "footer": null,
    "columns": null
}', '$.rows[0].LinkOrderNumber')  into lnum  FROM DUAL ;
 dbms_output.put_line(lnum);
END
commit;

输出结果:100000001

现在rows数组的长度是2,那么怎么写能读取到rows数组测长度呢?


加载中
0
非著名魔兽解说
非著名魔兽解说

已解决,代码为:

select count(*)
from json_table('{ "teacher_name": "Owen",
      "rows_stu": [
        {
            "ID":1201,
            "NAME": "Peter",
            "AGE": 23,
            "SE": "male",
            "FLAG":"delete"
        },
         {
            "ID":1568,
            "NAME": "Tom",
            "AGE": 32,
            "SE": "male",
            "FLAG":"insert"
        },
       {
            "ID":6695,
            "NAME": "Lucy",
            "AGE": 13,
            "SE": "female",
            "FLAG":"update"
        },
       {
            "ID":6720,
            "NAME": "Kate",
            "AGE": 15,
            "SE": "female",
            "FLAG":"update"
        },
       {
            "ID":2336,
            "NAME": "Jack",
            "AGE": 13,
            "SE": "male",
            "FLAG":"insert"
        }
      ]
  }', '$.rows_stu[*].ID'
    columns
    ID integer path '$')



0
乌龟壳
乌龟壳

最近经常看到类似的问题,不知道是不是你问的。建议参考官方文档看看Json有哪些功能。

https://docs.oracle.com/database/121/ADXDB/json.htm#GUID-9E6455EC-FE3B-428C-B958-1D535726EA26

阅读完文档后我凭空组出来以下sql供参考,我现在手头上没有Oracle12C,可能不对,仅供参考

SELECT count(t.row_id)
from json_table('{
    "total": 2,
    "rows": [
        {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 1,
            "DeleteFlag": 0
        },
         {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 2,
            "DeleteFlag": 0
        }
    ],
    "footer": null,
    "columns": null
    }',
    '$.rows[*]',
    columns(row_id integer path '$.Row_ID')
) t
0
非著名魔兽解说
非著名魔兽解说

引用来自“乌龟壳”的评论

最近经常看到类似的问题,不知道是不是你问的。建议参考官方文档看看Json有哪些功能。

https://docs.oracle.com/database/121/ADXDB/json.htm#GUID-9E6455EC-FE3B-428C-B958-1D535726EA26

阅读完文档后我凭空组出来以下sql供参考,我现在手头上没有Oracle12C,可能不对,仅供参考

SELECT count(t.row_id)
from json_table('{
    "total": 2,
    "rows": [
        {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 1,
            "DeleteFlag": 0
        },
         {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 2,
            "DeleteFlag": 0
        }
    ],
    "footer": null,
    "columns": null
    }',
    '$.rows[*]',
    columns(row_id integer path '$.Row_ID')
) t
试了,报错。
0
IdleMan
IdleMan

引用来自“乌龟壳”的评论

最近经常看到类似的问题,不知道是不是你问的。建议参考官方文档看看Json有哪些功能。

https://docs.oracle.com/database/121/ADXDB/json.htm#GUID-9E6455EC-FE3B-428C-B958-1D535726EA26

阅读完文档后我凭空组出来以下sql供参考,我现在手头上没有Oracle12C,可能不对,仅供参考

SELECT count(t.row_id)
from json_table('{
    "total": 2,
    "rows": [
        {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 1,
            "DeleteFlag": 0
        },
         {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 2,
            "DeleteFlag": 0
        }
    ],
    "footer": null,
    "columns": null
    }',
    '$.rows[*]',
    columns(row_id integer path '$.Row_ID')
) t

引用来自“非著名魔兽解说”的评论

试了,报错。

他写的是正确的。

'$.rows'->'$.rows[*]'

0
非著名魔兽解说
非著名魔兽解说

引用来自“乌龟壳”的评论

最近经常看到类似的问题,不知道是不是你问的。建议参考官方文档看看Json有哪些功能。

https://docs.oracle.com/database/121/ADXDB/json.htm#GUID-9E6455EC-FE3B-428C-B958-1D535726EA26

阅读完文档后我凭空组出来以下sql供参考,我现在手头上没有Oracle12C,可能不对,仅供参考

SELECT count(t.row_id)
from json_table('{
    "total": 2,
    "rows": [
        {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 1,
            "DeleteFlag": 0
        },
         {
            "Row_ID": 1,
            "Brand": "有所思",
            "ProductName": "牛肉酱210g ",
            "LinkOrderNumber": "100000001",
            "DetailNumber": 2,
            "DeleteFlag": 0
        }
    ],
    "footer": null,
    "columns": null
    }',
    '$.rows[*]',
    columns(row_id integer path '$.Row_ID')
) t

引用来自“非著名魔兽解说”的评论

试了,报错。

引用来自“IdleMan”的评论

他写的是正确的。

'$.rows'->'$.rows[*]'

这里面没有'$.rows'需要改为'$.rows[*]'啊,能告诉我咋处理吗?
返回顶部
顶部