oracle json 解析函数

CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split;
CREATE OR REPLACE TYPE ty_row_str_split  as object (strValue VARCHAR2(4000));
CREATE OR REPLACE FUNCTION fn_split(p_str IN VARCHAR2,p_delimiter IN VARCHAR2)
  RETURN ty_tbl_str_split IS
  j         INT := 0;
  i         INT := 1;
  len       INT := 0;
  len1      INT := 0;
  str       VARCHAR2(4000);
  str_split ty_tbl_str_split := ty_tbl_str_split();
BEGIN
  len  := LENGTH(p_str);
  len1 := LENGTH(p_delimiter);
  WHILE j < len LOOP
    j := INSTR(p_str, p_delimiter, i);


    IF j = 0 THEN
      j   := len;
      str := SUBSTR(p_str, i);
      str_split.EXTEND;
      str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
      IF i >= len THEN
        EXIT;
      END IF;
    ELSE
      str := SUBSTR(p_str, i, j - i);
      i   := j + len1;
      str_split.EXTEND;
      str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
    END IF;
  END LOOP;
  RETURN str_split;
END fn_split;


CREATE OR REPLACE FUNCTION parsejson(p_jsonstr varchar2,p_key varchar2) RETURN VARCHAR2
IS
  rtnVal VARCHAR2(1000);
  i NUMBER(2);
  jsonkey VARCHAR2(500);
  jsonvalue VARCHAR2(1000);
  json VARCHAR2(3000);
BEGIN
  IF p_jsonstr IS NOT NULL THEN
     json := REPLACE(p_jsonstr,'{','') ;
     json := REPLACE(json,'}','') ;
     json := replace(json,'"','') ;
     FOR temprow IN(SELECT strvalue AS VALUE FROM TABLE(fn_split(json, ','))) LOOP
        IF temprow.VALUE IS NOT NULL THEN
           i := 0;
           jsonkey := '';
           jsonvalue := '';
           FOR tem2 IN(SELECT strvalue AS VALUE FROM TABLE(fn_split(temprow.value, ':'))) LOOP
               IF i = 0 THEN
                  jsonkey := tem2.VALUE;
               END IF;
               IF i = 1 THEN
                  jsonvalue := tem2.VALUE;
               END IF;
 
               i := i + 1;
           END LOOP;
 
           IF(jsonkey = p_key) THEN
               rtnVal := jsonvalue;
           END if;
        END IF;
     END LOOP;
  END IF;
  RETURN rtnVal;
END parsejson;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Oracle JSON解析函数是一组用于处理JSON数据的内置函数。这些函数允许我们从JSON对象中提取数据,进行过滤、转换和操作。 首先,我们可以使用JSON_VALUE函数JSON对象中提取指定键的值。例如,JSON_VALUE('{"name":"John", "age":30}', '$.name')将返回"John"。此函数还支持通过路径表达式访问嵌套的JSON键。 其次,我们可以使用JSON_QUERY函数执行更复杂的查询和过滤。该函数可以使用SQL-JSON路径表达式定位和提取满足条件的JSON键值对。例如,JSON_QUERY('{"name":"John", "age":30}', '$.name')将返回一个JSON对象{"name":"John"}。 此外,我们可以使用JSON_OBJECT函数将查询结果合并为一个JSON对象。该函数接受键值对作为参数,并返回一个JSON对象。例如,JSON_OBJECT('name' VALUE 'John', 'age' VALUE 30)将返回一个{"name":"John", "age":30}的JSON对象。 最后,我们还可以使用JSON_TABLE函数JSON数据转换为关系表格形式,以便进行查询和分析。JSON_TABLE函数接受JSON对象和查询条件作为参数,并返回一个包含解析后数据的虚拟表。通过这个虚拟表,我们可以使用传统的SQL查询语言来对数据进行操作。 综上所述,OracleJSON解析函数提供了丰富的功能,使我们能够在Oracle数据库中处理和操作JSON数据。无论是提取特定的JSON值,还是进行复杂的查询和转换,这些函数都为我们的工作提供了便利和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值