Pasowanie danych JSON w Oracle SQL

0

Witam,

Wyciągając dane z bazy postgresql dostałem kolumnę POLE_J która jest typu CLOB ale zawiera tylko dane JSON lub null.
Przykład danych z tej kolumny dla jednego ID = 1 wygląda następująco:

[
{"kod": "A113", "desc" : "opis modułu", "type": "string"}, 
{"kod": "A114", "desc" : "opis planu", "type": "string"}, 
{"kod": "A115", 
"slo": 
	[{"wart": "praca  wykonana", "ozn": "pw"}, 
	{"wart": "praca przerwana", "ozn": "pp"},], 
 "desc" : "opis prac", "type": "string"},
{"kod": "A116", "desc" : "opis dzialania", "type": "string"}
]

Chcę napisać teraz zapytanie które pokaże mi dane:

ID || KOD || DESC || WART || OZN
1 || A113 || OPIS MODULU || NULL || NULL
1 || A114 || OPIS PLANU || NULL || NULL
1 || A115 || OPIS PRAC || PRACA WYKONANA || PW
1 || A115 || OPIS PRAC || PRACA PRZERWANA || PP
1 || A116 || OPIS DZIALANIA || NULL || NULL

Czy ktoś mógłby podpowiedzieć jak wykonać zapytanie żeby takie dane uzyskać - chodzi mi tylko o część z json?

Zacząłem coś w tym stylu:

    select kod
    from table_name 
    , 
    json_table(
        POLE_J,'$'
        columns(
            kod varchar2(20)  path '$.kod' ) ) e

Zostaje mi zwrócony tylko kod pierwszy: A113.
Czy tutaj należy wykonać jakąś pętle albo inną operację żeby wyciągnąć wszystkie kody dla całego json z tej komórki?

1

na Oracle się nie znam, ale w ramach rozrywki zrobiłem tak:

SELECT dt.id, jt.*
FROM dt,
JSON_TABLE(pole_j, '$[*]'
COLUMNS
  (
      description VARCHAR2(32) PATH '$.desc',
      TYP VARCHAR2(32) PATH '$.type',
      NESTED PATH '$.slo[*]'
         COLUMNS (
             WART VARCHAR(32) PATH '$.wart',
             ozn VARCHAR(32) PATH '$.ozn'
        )
     )
  )

AS jt;

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=6203491eab540d53eaf5600352e4f742

tu chodzi o to, że masz w polu tablicę bez roota więc pierwsza zmienna path musi wskazywać na wszystkie elementy w tablicy

1 użytkowników online, w tym zalogowanych: 0, gości: 1