powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование числа в json
35 сообщений из 35, показаны все 2 страниц
Преобразование числа в json
    #39642728
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle 12.2
Преобразование числа в json
Код: plsql
1.
select json_object(key 'x1' value 0.0133, key 'x2' value 0.133) from dual t


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


Понятно что можно to_char, но это же неправильно...
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39643356
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам себе злобный буратино - кто же тащит благоприобретенные багофичи в прод ранее чем через пару-тройку мажорных версий?
Оно же пока даже собственный синтаксис не выдерживают:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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 
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39643481
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
далеки вы от народа, поэтому и комментариев нет...
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39643800
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, почему-то возвращает в LAX формате. Я вписал FORMAT JSON STRICT, но ничего не поменялось. Написал чуваку из оракла, который этим занимается. Будем ждать.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39643810
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint, есть таблетка: Patch 27486853: MERGE REQUEST ON TOP OF 12.2.0.1.0 FOR BUGS 27450783 27459909
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39645176
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,
Спасибо, поставили - работает. Только таблетка для Линуха. для Винды нету и не предвидиться :)
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39645752
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй силу убеждения, Люк!
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39646317
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
2.
3.
SQL> select json_object(  'x1' value 0.0133 format JSON ) jo from dual t ;

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 

не понимаю, зачем тут "format JSON" ?
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39646325
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--зачем тут "format JSON" ?

Чтим доку:
авторFORMAT JSON
This clause is optional and is provided for semantic clarity .
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39646342
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousfor semantic clarityбоюсь, увидев ваш "format JSON", он полагает, что тем самым ему как бы намекают, что подсунутое значение будет JSON-строкой. а вы ему пытаетесь присунуть числовой литерал. вот он и в недоумении
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39646379
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--боюсь
Не бойтесь.
Читайте документацию.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39678324
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а теперь немного про преобразования timestamp в json. Все помнят что у systimestamp другой тип данных?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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, а убрав комментарий - работаем)
база все та же:
Код: plsql
1.
2.
3.
4.
5.
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

...
Рейтинг: 0 / 0
Преобразование числа в json
    #39678907
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё там же всё те же:
Код: plsql
1.
2.
3.
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 символов после запятой и только при отрицательных значениях.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39678981
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintрезультат воспроизводится только на точности в 38 символовЭто уже особенности промежуточной точности вычислений.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39679189
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,
ты немного не понял -99.9999999999999999999999999999999999999
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39686190
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня налетел на:
Row returned by JSON_OBJECTAGG ... RETURNING CLOB includes garbage character (Doc ID 2308008.1)
RETURNING clob нормально реализовать не смогли. даже с последними патчами второй раз воспроизводиться. а первый раз в сессии выполняется нормально.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39686200
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам бы так никогда не написал, но принесли на хвосте:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
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 :)
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39686732
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на 18 аналогично. но ничего, года через 3 заработает :)
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39686868
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,
3 года с выхода 12.2 вроде прошло))) у меня вообще сложилось впечатление что json они писали на коленке, причем это делал отдельный человек который никогда не видел oracle, при этом ему дали спецификацию на json_table не дав посмотреть на реализацию xml_table.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39832528
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередное беспощадное улучшение json2507724.1This 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 дает ошибку:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39848683
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал документацию .

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



Код: sql
1.
2.
3.
4.
select json_objectagg(key dummy value rn format json) x
from
  (select rownum rn, dummy from dual
   connect by level<11)



Код: sql
1.
2.
3.
4.
select json_object(key dummy value rn format json) x
from
  (select rownum rn, dummy from dual
   connect by level<11)



Код: sql
1.
2.
3.
4.
select json_object(key dummy value rn) x
from
  (select rownum rn, dummy from dual
   connect by level<11)



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

Ещё я пробовал вариант отсюда :
Код: sql
1.
2.
3.
4.
5.
6.
7.
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.

И даже запрос из первого сообщения этой темы
Код: sql
1.
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
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39848719
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PasticЭто из-за того, что я это делаю на Oracle 12.1, а не на 12.2?Осознанно взять инструкцию от другой версии, получить неожиданный ожидаемый результат и взывать к форуму, чтобы кто-то сравнил за тебя документацию на разные версии? В недоумении...
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39916714
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще в копилку странностей json (19.5)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
> 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.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39916746
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot -2-#22063575]Еще в копилку странностей json (19.5)
Код: plsql
1.
2.
3.
4.
5.
> select t1s.nextval, json_object(t.dummy) j from dual t;

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


а что в таком варианте
Код: plsql
1.
select t1s.nextval, json_object(t."DUMMY") j from dual t;
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39916763
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй
а что в таком варианте
Различие в регистре sql-странно, но документировано.
Код: plsql
1.
2.
3.
4.
5.
select json_object(t.DummY) j from dual t;

J                             
------------------------------
{"DummY":"X"}

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

Вопрос был о более другой странности, что запрос с json_object во что-то преобразуется и сиквенс оказывается где-то в подзапросе.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39919393
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, а с этим что-нибудь можно поделать?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SELECT banner
  FROM v$version
 WHERE 1=1;

DROP TABLE LOB_AUTO CASCADE CONSTRAINTS;

CREATE TABLE LOB_AUTO
(
  ID       INTEGER                              NOT NULL,
  LB_NAME  VARCHAR2(255 BYTE)
);

SET DEFINE OFF;
INSERT INTO LOB_AUTO
   (ID, LB_NAME)
 VALUES
   (1, 'ОСАГО');
INSERT INTO LOB_AUTO
   (ID, LB_NAME)
 VALUES
   (2, 'КАСКО');
COMMIT;

column  lob_val format a20
column  lob_name format a10 
column  lob_name_qt format a10

WITH tc AS (
SELECT JSON_OBJECT (KEY 'lob_name' VALUE ld.LB_NAME format json) lob_val
     , JSON_OBJECT (KEY 'lob_name' VALUE '"'||ld.LB_NAME||'"' format json) lob_val_qt
  FROM lob_auto ld
 WHERE 1=1  
)
SELECT lob_val,
    TO_CHAR(json_value(lob_val,  '$.lob_name')) lob_name
    ,TO_CHAR(json_value(lob_val_qt,  '$.lob_name')) lob_name_qt
  FROM tc; 



Результат:
Код: plaintext
1.
2.
3.
4.
5.
 [code=plsql]
LOB_VAL              LOB_NAME   LOB_NAME_Q
-------------------- ---------- ----------
{"lob_name":ОСАГО}              ОСАГО
{"lob_name":КАСКО}              КАСКО


Т.е. при формировании поля lob_name не экранируются значения. Это понятно, т.к. используется format json. А если без него, то получаем ошибку: ORA-40474: недопустимая последовательность байтов UTF-8 в данных JSON

Настройки БД:
NLS_CHARACTERSET CL8MSWIN1251
NLS_NCHAR_CHARACTERSET AL16UTF16

На компе:
NLS_LANG: AMERICAN_AMERICA.WE8MSWIN1252. Упс, ???, я ожидал AMERICAN_AMERICA.CL8MSWIN1251, который стоит во втором Хоме.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39919420
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sah,

dump
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39919452
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё чисто
Код: plaintext
1.
2.
3.
4.
5.
 [code=plsql]
LOB_VAL              LOB_NAME LOB_NAME_Q DMP
-------------------- -------- ---------- --------------------------------
{"lob_name":ОСАГО}            ОСАГО      Typ=1 Len=5: 206,209,192,195,206
{"lob_name":КАСКО}            КАСКО      Typ=1 Len=5: 202,192,209,202,206

...
Рейтинг: 0 / 0
Преобразование числа в json
    #39940119
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то недокрутили в json_типах с remote lob локатором.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0

SQL> set serveroutput on
SQL> declare
  2    j json_element_t;
  3    c clob;
  4  begin
  5    select full_text into c from all_statements@remote where rownum=1 and length(full_text) > 0;
  6    dbms_output.put_line(substr('c='||c, 1,22));
  7    j := json_element_t.parse(c);
  8  end;
  9  /
c=SELECT COUNT(*) FROM
declare
*
ERROR at line 1:
ORA-02019: connection description for remote database not found
ORA-06512: at "SYS.JDOM_T", line 9
ORA-06512: at "SYS.JSON_ELEMENT_T", line 22
ORA-06512: at line 7

Вероятно, внутри оно под current_schema=sys пытается влезть в дблинк по приватному имени.
Если публичный, то работает. Если приватный и одноименный публичный:
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], [], [], [], [], []
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39941606
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копилка пополняется, 19.5
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare
  js varchar2(100 char) := '{"x":null}';
  j json_object_t;
  s varchar2(100 char);
  c clob;
begin
  select json_value(js, '$.x' returning varchar2(100 char)),
         json_value(js, '$.x' returning clob)
    into s, c
    from dual;
  dbms_output.put_line('___sql s=['||s||'] c=['||c||']');
  j := json_object_t(js);
  s := j.get_string('x'); c := j.get_clob('x');
  dbms_output.put_line('pl/sql s=['||s||'] c=['||c||']');  
end;
/

___sql s=[] c=[]
pl/sql s=[] c=[null]
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39980100
Cheese)))
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос из официальной доки
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_OBJECT.html#GUID-1EF347AE-7FDA-4B41-AFE0-DD5A49E8B370

Код: plsql
1.
SELECT JSON_OBJECT ('name' value 'Foo' FORMAT JSON ) FROM DUAL



На Sql Live отрабатывает.

На нашем Windows Database Bundle Patch : 19.7.0.0.200414
падает с ORA-22800: неверн. пользовательский тип

Кто-нибудь знает какой патч нужно поставить? не смог найти

Сам не видел, но говорят под SYS запрос работает.
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39980107
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cheese))),

а
Код: plsql
1.
exec for r in (SELECT JSON_OBJECT ('name' value 'Foo' FORMAT JSON ) FROM DUAL) loop null; end loop;


тоже валится с ошибкой?
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39980147
varlamovvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

да, та же ошибка.
18.0.0.0.0 - ORA-00932: несовместимые типы данных: ожидается UDT, получено CHAR
19.0.0.0.0 - ORA-22800: invalid user-defined type
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39980151
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
varlamovvp,

своих типов с таким именем не создавали?
...
Рейтинг: 0 / 0
Преобразование числа в json
    #39980156
varlamovvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

Спасибо за наводку!
блин, это же должно было быть очевидно.

CREATE OR REPLACE type MY_USER.JSON as object (
/*
Copyright (c) 2010 Jonas Krogsboell ...
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование числа в json
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]