powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование числа в json
10 сообщений из 35, страница 2 из 2
Преобразование числа в 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
10 сообщений из 35, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование числа в json
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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