Możesz zdefiniować funkcje:
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;
/
Następnie użyj zapytania:
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
Które wyjścia:
ID ID_ORD KLUCZ VALUE 14442845174255;2187606199CODEONB2B3BB814442845174255;2187606199DORD25.04.2021(Uwaga:SQL nie obsługuje dynamicznej liczby kolumn, więc musisz podać stałą liczbę kolumn, np.
key
ivalue
i otrzymaj wynik w postaci wierszy, a nie kolumn).db<>graj tutaj
Jak mogę wygenerować (lub pobrać) skrypt ddl na istniejącej tabeli w Oracle? Muszę je odtworzyć w Hive
podzapytanie skalarne w instrukcji if Warunek w PL/SQL
Zmiany w Grupie Serwisowej w R12.2
Funkcje o wartościach tabelarycznych w ORACLE 11g ? ( widoki parametryczne )
Jaka jest dokładnie różnica między indeksem pierwotnym a indeksem wtórnym?