sql >> Database teknologi >  >> RDS >> Oracle

Parse json gennem json_table i oracle 18

Du kan definere funktionerne:

CREATE FUNCTION get_keys(
  value IN CLOB
) RETURN SYS.ODCIVARCHAR2LIST PIPELINED
IS
  js   JSON_OBJECT_T := JSON_OBJECT_T( value );
  keys JSON_KEY_LIST;
BEGIN
  keys := js.get_keys();
  FOR i in 1 .. keys.COUNT LOOP
    PIPE ROW ( keys(i) );
  END LOOP;
END;
/

CREATE FUNCTION get_value(
  value IN CLOB,
  path  IN VARCHAR2
) RETURN VARCHAR2
IS
  js JSON_OBJECT_T := JSON_OBJECT_T( value );
BEGIN
  RETURN js.get_string( path );
END;
/

Brug derefter forespørgslen:

WITH j (sJson) as (
   select '{
      "ID":"1444284517",
      "ID_ORD":"4255;2187606199",
      "Vals":{
               "CODE":"ONB2B3BB8",
               "DORD":"25.04.2021"
             }
   }'
   from dual
)
SELECT jt.id,
       jt.id_ord,
       k.COLUMN_VALUE AS Key,
       get_value( jt.vals, k.COLUMN_VALUE ) AS value
FROM   j
       CROSS APPLY JSON_TABLE(
         j.sjson,
         '$'
         COLUMNS (
           id     VARCHAR2(20) PATH '$.ID',
           id_ord VARCHAR2(30) PATH '$.ID_ORD',
           vals   VARCHAR2(4000) FORMAT JSON PATH '$.Vals'
         )
       ) jt
       CROSS APPLY get_keys( jt.vals ) k

Hvilken udgang:

ID ID_ORD NØGLE VÆRDI 14442845174255;2187606199CODEONB2B3BB814442845174255;2187606199DORD25.04.2021

(Bemærk:SQL understøtter ikke et dynamisk antal kolonner, så du skal angive et fast antal kolonner såsom key og value og have output som rækker i stedet for kolonner.)

db<>spil her



  1. Hvordan sprogindstillinger kan påvirke dine FORMAT()-resultater i SQL Server (T-SQL-eksempler)

  2. Bestem Oracle null ==null

  3. Android SQLite jokertegn

  4. Pivot med flere kolonner i T-SQL