powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Непонятки с json_value: ORA-00932: несовместимые типы данных
7 сообщений из 7, страница 1 из 1
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052154
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, всем.

Что-то не пойму. Следующий запрос выдаёт ошибку: ORA-00932: несовместимые типы данных: ожидается -, получено CHAR
Код: plsql
1.
2.
3.
4.
5.
6.
7.
WITH t_table AS (
SELECT '{"3": "001GS20-031593", "6": "1-N0019O" }' AS json_text FROM dual
UNION ALL
SELECT '{"3": "001GS40-031593", "6": "1-N0029O" }' as json_text FROM dual
)
   SELECT json_text,json_value(json_text , '$."6"' RETURNING VARCHAR2(30)) AS resultCode
     FROM t_table;



А если оставить одну строку, то всё отрабатывает.


BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Standard 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 Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production
...
Рейтинг: 0 / 0
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052170
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала проверьте JSON на синтаксис. Например, jsoneditoronline.org
...
Рейтинг: 0 / 0
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052212
SenjorPomidor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sah,
Скопировал ваш код, все выполняется без ошибок.
...
Рейтинг: 0 / 0
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052318
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sah,

json_value фейлится на char, если кастануть к varchar2, то отработает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH t_table AS (
SELECT '{"3": "001GS20-031593", "6": "1-N0019O" }' AS json_text FROM dual
UNION ALL
SELECT '{"3": "001GS40-031593", "6": "1-N0029O" }' as json_text FROM dual
)
   SELECT json_text,json_value(cast(json_text as varchar2(100)), '$."6"' RETURNING VARCHAR2(30)) AS resultCode
     FROM t_table;

JSON_TEXT                                 RESULTCODE
----------------------------------------- ------------------------------
{"3": "001GS20-031593", "6": "1-N0019O" } 1-N0019O
{"3": "001GS40-031593", "6": "1-N0029O" } 1-N0029O
...
Рейтинг: 0 / 0
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052378
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov
Sah,

json_value фейлится на char, если кастануть к varchar2, то отработает:


Спасибо, Саян. В доке так было и написано, что работает на VARCHAR2, CLOB, or BLOB. А он строковый литерал как CHAR воспринимает.
Не помню такого из документации.

Но почему, тогда, если оставить одну строку, то отрабатывает?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH t_table AS (
SELECT '{"3": "001GS20-031593", "6": "1-N0019O" }' AS json_text FROM dual
)
   SELECT json_text,json_value(json_text, '$."6"' RETURNING VARCHAR2(30)) AS resultCode
     FROM t_table;     
     

JSON_TEXT                                 RESULTCODE                    
----------------------------------------- ------------------------------
{"3": "001GS20-031593", "6": "1-N0019O" } 1-N0019O                      
...
Рейтинг: 0 / 0
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052405
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sah
В доке так было и написано, что работает на VARCHAR2
по-хорошему, там должен был авто-каст Char->Varchar2 сработать


Sah
Но почему, тогда, если оставить одну строку, то отрабатывает?

ну только потому что запрос трансформируется и в функцию идет литерал:
Код: plsql
1.
SELECT '{"3": "001GS20-031593", "6": "1-N0019O" }' json_text,json_value('{"3": "001GS20-031593", "6": "1-N0019O" }', '$."6"' RETURNING VARCHAR2(30)) AS resultCode FROM DUAL


отключи - и снова получишь проблему:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  1  WITH t_table AS (SELECT '{"3": "001GS20-031593", "6": "1-N0019O" }' AS json_text FROM dual)
  2  SELECT--+ no_merge(t_table)
  3   json_text,json_value(json_text, '$."6"' RETURNING VARCHAR2(30)) AS resultCode
  4* FROM t_table
SQL> /
 json_text,json_value(json_text, '$."6"' RETURNING VARCHAR2(30)) AS resultCode
                      *
ERROR at line 3:
ORA-00932: inconsistent datatypes: expected - got CHAR
...
Рейтинг: 0 / 0
Непонятки с json_value: ORA-00932: несовместимые типы данных
    #40052526
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, понял.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Непонятки с json_value: ORA-00932: несовместимые типы данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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