|
Использование json_exists
|
|||
---|---|---|---|
#18+
Всем привет Ранее не особо не работала с json, но вот нужда заставила :) Не совсем понимаю, можно ли параметром передавать построчно значение колонки в json_exists. Пример запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Результат выполнения: id_list id["101"] 101["101"] 102 Необходимый/ожидаемый результат: id_list id["101"] 101["102"] 102 По идее можно распарсить через json_table сначала и использовать, но вдруг я чего-то не понимаю, ткните, плиз, в РТФМ. PS. Не использовать json не предлагать, внутренний стандарт требует именно его в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 15:30 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
karbka, В общем, да, походу json_exists только для фильтрации. Код: 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.
id id_list101 ["101";"1569"]102 ["102"] ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 16:08 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
karbka, c jonson не работал поетому странно что результат зависит от порядка строк Код: plsql 1. 2. 3. 4. 5. 6.
и Код: plsql 1. 2. 3. 4. 5. 6.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 16:52 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
C json-ом тоже никогда не работал, кинулся читать доку по 18 и 19 . https://docs.oracle.com/en/database/oracle/oracle-database/19/adjsn/condition-JSON_EXISTS.html#GUID-D60A7E52-8819-4D33-AEDB-223AB7BDE60A The second argument to json_exists is a SQL/JSON path expression followed by an optional PASSING clause and an optional error clause. The optional filter expression of a SQL/JSON path expression used with json_exists can refer to SQL/JSON variables, whose values are passed from SQL by binding them with the PASSING clause. The following SQL data types are supported for such variables: VARCHAR2, NUMBER, BINARY_DOUBLE, DATE, TIMESTAMP, and TIMESTAMP WITH TIMEZONE. С clause passing (по крайней мере на этих страницах документации) подло не опубликовали ни одного примера. Код: 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. 38. 39. 40. 41. 42.
Такое ощущение, что passing хватает значение при доступе к первой обработанной записи и кеширует его у себя в кишках, игнорируя значения во всех остальных строках, выдавая тем самым неверный результат. При попытке же склеить значение в конкатенации ругается ORA-00907: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 16:54 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
Stax, AmKad, Да, заметила это тоже, спасибо... Короче заюзала json_table и не буду париться. Вообще это задумывалось как универсальная структура для облегчения работы с множествами. В итоге для инициализацинного скрипта таблицы написала кучу кастомного кода (три таких стоблца), чтобы не было перечений множеств при вставке (констрейнты не повесишь) и теперь при непосредственном запросе куча танцев с бубном. Ну, такая себе оптимизация. Есть подозрение, что комбинаций для правил будет немного, так что я бы вообще создала плоскую таблицу с необходимыми комбинациями, повесила констрейнт на уникальность и жила бы себе счастливо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 17:09 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
Ну и по складывающейся традиции AmKad-овский костыль, работающий далеко не на всех версиях - делаем PL/SQL функцию. 18-ой у меня под рукой нет. 12.2.0.1.0 - не работает Код: 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
19.4.0.0.0 - лишь бы не сглазить Код: 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 17:35 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
AmKad, Ахах, это я в связи с тем, что слишком часто пишу на форум забыла указать версию, сорян :)) Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2019, 17:54 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
Всем спасибо, остановилась на варианте Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 13:46 |
|
Использование json_exists
|
|||
---|---|---|---|
#18+
karbka, В случае, если в массиве будут неуникальные элементы, этот запрос может дать "размножение" записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 14:27 |
|
|
start [/forum/topic.php?fid=52&msg=39866422&tid=1882042]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 153ms |
0 / 0 |