#sql #json #oracle #plsql
Имею json вида: [ { "debitOverturn": "939.34", "table": [ { "debit": "", "credit": "939.34" }, { "debit": "939.34", "credit": "" } ] }, { "debitOverturn": "939.34", "table": [ { "debit": "", "credit": "939.34" }, { "debit": "939.34", "credit": "" } ] } ] Делаю к нему запрос (на oracle 12.1): SELECT jt.u_lvl, jt.debitOverturn, jt.l_lvl, jt.debit, jt.credit FROM some_table s, JSON_TABLE (s.clob_for_json,'$[*]' COLUMNS ( u_lvl FOR ORDINALITY, debitOverturn VARCHAR2(20) PATH '$.debitOverturn', NESTED PATH '$.table[*]' COLUMNS ( l_lvl FOR ORDINALITY, debit VARCHAR2(38) PATH '$.debit', credit VARCHAR2(38) PATH '$.credit'))) AS jt WHERE s.hash = :l_hash и получаю довольно странный результат для счетчика: U_LVL DEBITOVERTURN L_LVL DEBIT CREDIT 1 939.34 1 (null) 939.34 2 939.34 2 939.34 (null) 3 939.34 1 (null) 939.34 4 939.34 2 939.34 (null) т.е. U_LVL считает строки не своего уровня, а вообще все. Повторяю запрос на домашней виртуалке с 12.2 - результат ожидаемый: U_LVL DEBITOVERTURN L_LVL DEBIT CREDIT 1 939.34 1 (null) 939.34 1 939.34 2 939.34 (null) 2 939.34 1 (null) 939.34 2 939.34 2 939.34 (null) Самое смешное, что при повторе запроса на оракловском livesql.oracle.com, результат еще страньше: U_LVL DEBITOVERTURN L_LVL DEBIT CREDIT 1 939.34 1 (null) 939.34 1 939.34 2 939.34 (null) 1 939.34 1 (null) 939.34 1 939.34 2 939.34 (null) Это как вообще понимать? Баг? Поведение ORDINALITY настраивается где-то?
Ответы
Ответ 1
В итоге оказался баг в json_table, если кому интересно, для исправления нужно установить патч на 12.1.0.2.0, на 12.2 уже исправлено.
Комментариев нет:
Отправить комментарий