Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Parsing json melalui json_table di Oracle 18

Anda dapat menentukan fungsinya:

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;
/

Kemudian gunakan kueri:

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

Keluaran mana:

ID ID_ORD KUNCI VALUE 14442845174255;2187606199CODEONB2B3BB814442845174255;2187606199DORD25.04.2021

(Catatan:SQL tidak mendukung jumlah kolom yang dinamis sehingga Anda perlu memberikan jumlah kolom yang tetap seperti key dan value dan memiliki output sebagai baris daripada kolom.)

db<>main biola di sini



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara USER() dan SYS_CONTEXT('USERENV','CURRENT_USER')?

  2. Membuat pemicu di Oracle Express

  3. Cara efisien untuk memperbarui semua baris dalam tabel

  4. cx_Oracle:Bagaimana saya bisa menerima setiap baris sebagai kamus?

  5. LISTAGG di Oracle untuk mengembalikan nilai yang berbeda