Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
Oracle 12.2
Преобразование числа в json
select json_object(key 'x1' value 0.0133, key 'x2' value 0.133) from dual t

Преобразуем как сегодня больше хочется, куда делся ведущий 0?
{"x1":.0133,"x2":0.133}

Понятно что можно to_char, но это же неправильно...
10 май 18, 15:27    [21400240]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17833
Сам себе злобный буратино - кто же тащит благоприобретенные багофичи в прод ранее чем через пару-тройку мажорных версий?
Оно же пока даже собственный синтаксис не выдерживают:

SQL> select banner from v$version;

BANNER
----------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

SQL> select json_object(  'x1' is 0.0133 ) jo from dual t ;

JO
--
{"x1":.0133}

SQL> select json_object(  'x1' value '0.0133' format JSON ) jo from dual t ;

JO
--
{"x1" : 0.0133}


SQL> select json_object(  'x1' value 0.0133 format JSON ) jo from dual t ;

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 
11 май 18, 16:02    [21403540]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Fogel
Member

Откуда:
Сообщений: 373
далеки вы от народа, поэтому и комментариев нет...
12 май 18, 00:19    [21404410]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
Да, почему-то возвращает в LAX формате. Я вписал FORMAT JSON STRICT, но ничего не поменялось. Написал чуваку из оракла, который этим занимается. Будем ждать.
13 май 18, 11:36    [21406148]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
Vint, есть таблетка: Patch 27486853: MERGE REQUEST ON TOP OF 12.2.0.1.0 FOR BUGS 27450783 27459909
13 май 18, 12:35    [21406192]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
Shtock,
Спасибо, поставили - работает. Только таблетка для Линуха. для Винды нету и не предвидиться :)
15 май 18, 18:59    [21411532]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
Используй силу убеждения, Люк!
16 май 18, 19:26    [21414749]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
andrey_anonymous
SQL> select json_object(  'x1' value 0.0133 format JSON ) jo from dual t ;

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 
не понимаю, зачем тут "format JSON" ?
17 май 18, 18:20    [21418217]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17833
--Eugene--
зачем тут "format JSON" ?


Чтим доку:
автор
FORMAT JSON
This clause is optional and is provided for semantic clarity.
17 май 18, 18:41    [21418269]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
andrey_anonymous
for semantic clarity
боюсь, увидев ваш "format JSON", он полагает, что тем самым ему как бы намекают, что подсунутое значение будет JSON-строкой. а вы ему пытаетесь присунуть числовой литерал. вот он и в недоумении
17 май 18, 19:15    [21418367]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17833
--Eugene--
боюсь

Не бойтесь.
Читайте документацию.
17 май 18, 21:32    [21418660]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
а теперь немного про преобразования timestamp в json. Все помнят что у systimestamp другой тип данных?
with c as
 (select  systimestamp ct_change  from dual 
 --union all select to_timestamp('10-Sep-02 14:10:10.123000', 'DD-Mon-RR HH24:MI:SS.FF') from dual
 )
select 
       json_object(key 'ct_change' value c.ct_change)
  from c 

так получаем 40654, а убрав комментарий - работаем)
база все та же:
+
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
"CORE	12.2.0.1.0	Production"
TNS for 64-bit Windows: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production
24 июл 18, 14:47    [21598259]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
Всё там же всё те же:
with c as
 (select to_number('-0.' || lpad('9', 39, '9'), '9D' || lpad('9', 39, '9')) cn_value from dual)
select cn_value, json_object(key 'ct_change' value cn_value) from c

-1 ,{"ct_change":-99.9999999999999999999999999999999999999} результат воспроизводится только на точности в 38 символов после запятой и только при отрицательных значениях.
25 июл 18, 13:48    [21601149]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
-2-
Member

Откуда:
Сообщений: 15279
Vint
результат воспроизводится только на точности в 38 символов
Это уже особенности промежуточной точности вычислений.

К сообщению приложен файл. Размер - 10Kb
25 июл 18, 15:01    [21601417]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
-2-,
ты немного не понял -99.9999999999999999999999999999999999999
25 июл 18, 17:52    [21602224]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
Сегодня налетел на:
Row returned by JSON_OBJECTAGG ... RETURNING CLOB includes garbage character (Doc ID 2308008.1)
RETURNING clob нормально реализовать не смогли. даже с последними патчами второй раз воспроизводиться. а первый раз в сессии выполняется нормально.
10 авг 18, 16:28    [21638158]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
сам бы так никогда не написал, но принесли на хвосте:
with
  w_data as
  (
    select --+materialize
           *
      from (select 1 as f, sysdate as d1, sysdate + 100 as d2 from dual)
  ),
  w_tree as
  (
    select 1 as f, to_number(null) as pf, 1    as cf from dual union all
    select 2 as f, to_number(1)    as pf, null as cf from dual union all
    select 3 as f, to_number(1)    as pf, null as cf from dual union all
    select 4 as f, to_number(1)    as pf, null as cf from dual union all
    select 5 as f, to_number(null) as pf, 1    as cf from dual union all
    select 6 as f, to_number(5)    as pf, null as cf from dual union all
    select 7 as f, to_number(5)    as pf, null as cf from dual union all
    select 8 as f, to_number(7)    as pf, null as cf from dual
  )
select 1
  from w_tree t
       left join w_data d
              on connect_by_root(cf) = d.f
start with t.cf =1
connect by prior t.f = t.pf

в общем то естественная ora-600 на 12.2 :)
10 авг 18, 16:51    [21638177]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
на 18 аналогично. но ничего, года через 3 заработает :)
13 авг 18, 11:05    [21640050]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Vint
Member

Откуда: Москва
Сообщений: 4554
Shtock,
3 года с выхода 12.2 вроде прошло))) у меня вообще сложилось впечатление что json они писали на коленке, причем это делал отдельный человек который никогда не видел oracle, при этом ему дали спецификацию на json_table не дав посмотреть на реализацию xml_table.
13 авг 18, 13:50    [21640396]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
-2-
Member

Откуда:
Сообщений: 15279
Очередное беспощадное улучшение json
2507724.1
This behavior is expected. SELECT FOR UPDATE on a table with JSON data is disallowed. This restriction began being enforced in 19.1 and the patch was backported for earlier versions where it first appears in the 12.2.0.1.190115DBJAN2019RU.
В 18.4 работает, в 19.3 дает ошибку:
create table notajson(n number);

select t.n, (select count(*) from json_table('[]', '$[*]' columns (x varchar2(10 char))) jt) const_expr
from notajson t
for update of t.n;

ORA-01786: FOR UPDATE of this query expression is not allowed
1 июл 19, 23:37    [21918608]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
Pastic
Member

Откуда: Москва
Сообщений: 1748
Прочитал документацию.

Пробовал следующие варианты:
select json_objectagg(key dummy value rn) x
from
  (select rownum rn, dummy from dual
   connect by level<11)


select json_objectagg(key dummy value rn format json) x
from
  (select rownum rn, dummy from dual
   connect by level<11)


select json_object(key dummy value rn format json) x
from
  (select rownum rn, dummy from dual
   connect by level<11)


select json_object(key dummy value rn) x
from
  (select rownum rn, dummy from dual
   connect by level<11)


Все эти варианты возвращают ошибку ORA-00907: missing right parenthesis

Ещё я пробовал вариант отсюда:
SELECT JSON_OBJECTAGG( id VALUE text )
FROM   XMLTABLE(
         '/xml/*'
         PASSING XMLTYPE( '<xml><name>himanshu</name></xml>')
         COLUMNS id   VARCHAR2(200) PATH './name()',
                 text VARCHAR2(200) PATH './text()'
       );


Он тоже возвращает ORA-00907: missing right parenthesis.

И даже запрос из первого сообщения этой темы
select json_object(key 'x1' value 0.0133, key 'x2' value 0.133) from dual
тоже возвращает эту ошбку. Это из-за того, что я это делаю на Oracle 12.1, а не на 12.2?

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64-bit Production
13 авг 19, 11:21    [21947835]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
-2-
Member

Откуда:
Сообщений: 15279
Pastic
Это из-за того, что я это делаю на Oracle 12.1, а не на 12.2?
Осознанно взять инструкцию от другой версии, получить неожиданный ожидаемый результат и взывать к форуму, чтобы кто-то сравнил за тебя документацию на разные версии? В недоумении...
13 авг 19, 11:58    [21947889]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
-2-
Member

Откуда:
Сообщений: 15279
Еще в копилку странностей json (19.5)
> select t1s.nextval, json_object(t.dummy) j from dual t;

   NEXTVAL J                             
---------- ------------------------------
       123 {"dummy":"X"}                 

> select 123, json_object(t.*) j from dual t;

       123 J                             
---------- ------------------------------
       123 {"DUMMY":"X"}                 

> select t1s.nextval, json_object(t.*) j from dual t;

ORA-02287: sequence number not allowed here
Также json_object(*) несовместим c использованием plsql-переменных где-либо в том же запросе с ошибкой ORA-00904: "X": invalid identifier.
21 янв 20, 11:30    [22063575]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
123йй
Member

Откуда:
Сообщений: 1586
[quot -2-#22063575]Еще в копилку странностей json (19.5)
> select t1s.nextval, json_object(t.dummy) j from dual t;

   NEXTVAL J                             
---------- ------------------------------
       123 {"dummy":"X"}                 

а что в таком варианте
select t1s.nextval, json_object(t."DUMMY") j from dual t;
21 янв 20, 12:28    [22063621]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование числа в json  [new]
-2-
Member

Откуда:
Сообщений: 15279
123йй
а что в таком варианте
Различие в регистре sql-странно, но документировано.
select json_object(t.DummY) j from dual t;

J                             
------------------------------
{"DummY":"X"}
Естественно, sql-индусы plsql-индусам об этом не сообщили и при plsql-нормализации запроса идентификатор оказывается в верхнем регистре "DUMMY".

Вопрос был о более другой странности, что запрос с json_object во что-то преобразуется и сиквенс оказывается где-то в подзапросе.
21 янв 20, 12:52    [22063640]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить