|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
GarrickLeonid Kudryavtsevа что тут вызывает Ваше сомнение? SQLDataType.CLOB - лично мне вызывает подозрение, что бага где-то в другом месте ((( То, что CLOB пытаются запихнуть в String. Честно говоря, лично я криминала не вижу. Да и по смыслу, CLOB это как раз очень большая строка (в отличие от BLOB, которые последовательность байт, а не строка) В любом случае, нужно просто пройтись дебагером. IDEA точно в пошаговом режиме в декопилированные классы заходить умеет, с Eclipse'ом не уверен. Да и ошибка, не Java'вская, а Oracle'вая. Т.е. с вероятностью 95% не верно вызывается registerOutParameter IMHO в любом случае, корректный маппинг (что понимать под корректный, конечно вопрос спорный) - задача библиотеки. Маппинг CLOB в String IMHO вполне корректная операция, если не привышены лимиты языка. В данном случае, лимиты java.String не превышены. С этом библиотекой не работал, т.ч. лично мне пофиг. Но пройтись дебагером и найти ошибку, задаача максимум на день. IMHO & AFAIK Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 13:23 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevДа и ошибка, не Java'вская, а Oracle'вая. Вы не угадали. Ошибка программиста, который неправильно использует JOOG. Поскольку я сам не пользуюсь JOOG, то затрудняюсь указать её конкретнее. А может, у JOOG есть ограничение. Смотреть документацию по JOOG. авторIMHO в любом случае, корректный маппинг (что понимать под корректный, конечно вопрос спорный) - задача библиотеки. А его настройка - задача программиста. автор Да и по смыслу, CLOB это как раз очень большая строка Это рассуждение прямо подстрекает сделать ошибку в Java коде (а потом ещё можно будет поругать за неё Oracle). авторМаппинг CLOB в String IMHO вполне корректная операция, если не привышены лимиты языка. В данном случае, лимиты java.String не превышены. И это рассуждение тоже. В Oracle автоматическое преобразование из CLOB в строку работает без проблем при размере CLOB до 4K. При большем размере может возникнуть проблема от не читания документации. Но вообще можно загрузить в программу CLOB любого размера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 15:09 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Скатываемся в offtopic ((( Вы не угадали. Ошибка программиста, который неправильно использует JOOG. Поскольку я сам не пользуюсь JOOG , то затрудняюсь указать её конкретнее. А может, у JOOG есть ограничение. Смотреть документацию по JOOG. So do I. Т.ч. без тестового примера и дебага до проблемной строки, разговор становится безпредметный. Лично у меня дебажит библиотеку, которой я не пользуюсь, желания пока нет ))) Это рассуждение..... ВикипедияСтроковый тип В программировании, строковый тип (англ. string «нить, вереница») — тип данных, значениями которого является произвольная последовательность (строка) символов алфавита. Каждая переменная такого типа (строковая переменная) может быть представлена фиксированным количеством байтов либо иметь произвольную длину. .... Документации Oracle Overview of Character Datatypes The character datatypes store character (alphanumeric) data in strings , with byte values corresponding to the character encoding scheme, generally called a character set or code page. .... This section includes the following topics: CHAR Datatype VARCHAR2 and VARCHAR Datatypes Length Semantics for Character Datatypes NCHAR and NVARCHAR2 Datatypes Use of Unicode Data in Oracle Database LOB Character Datatypes LONG Datatype .... VARCHAR2 and VARCHAR Datatypes The VARCHAR2 datatype stores variable-length character strings...maximum string length (in bytes or characters) between 1 and 4000 bytes for the VARCHAR2 column.... ... LOB Character Datatypes The LOB datatypes for character data are CLOB and NCLOB. They can store up to 8 terabytes of character data (CLOB) or national character set data (NCLOB). ... https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT213 И это рассуждение тоже. В Oracle автоматическое преобразование из CLOB в строку работает без проблем при размере CLOB до 4K. При большем размере может возникнуть проблема от не читания документации. Но вообще можно загрузить в программу CLOB любого размера. Не правда. Без проблем до размера, которого позволяет тип varchar2. В PL/SQL - 32 Kb, в SQL - 4 Kb. (конкретные точные лимиты смотреть в документации) + разумеется учет кодировки при чем тут "не читание документации" вообще не понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 15:42 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Короче я решил проблему поблоковым чтением этого клоба (по 32к). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 16:35 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevНе правда. Без проблем до размера, которого позволяет тип varchar2. В PL/SQL - 32 Kb, в SQL - 4 Kb. (конкретные точные лимиты смотреть в документации) + разумеется учет кодировки при чем тут "не читание документации" вообще не понятно Сейчас объясню. Вы стали фантазировать, что CLOB и текстовая строка это почти одно и то же. Но не надо путать фантазии и знание, на что я указал. Поэтому надо читать документацию. CLOB существенно отличается от строки приёмами программирования для работы с ним (которые зависят ещё и от СУБД). Вы привели фрагмент документации. Это хорошо, что вы её читаете. Но приведённый фрагмент не имеет никакого отношения к делу. Конкретно. Беру пример - поле CLOB my_clob в таблице my_table В Oracle SQL Developer делаю запрос SELECT my_clob, DBMS_LOB.GETLENGTH (my_clob) AS my_clob_length FROM my_table вижу результаты (которые Oracle SQL Developer правильно показывает как текст, значит можно преобразовать). Но если я согласно вашему мнению преобразую CLOB в Varchar2 функцией TO_CHAR https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions179.htm#i1006717][функцией TO_CHAR/url] То при длине CLOB больше 4000 возможно возникновение ошибки: сообщение об ошибкеORA-22835: Размер буфера недостаточен для преобразования CLOB в CHAR или BLOB в RAW (фактически: 4652, максимум: 4000) 22835. 00000 - "Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: %s, maximum: %s)" *Cause: An attempt was made to convert CLOB to CHAR or BLOB to RAW, where the LOB size was bigger than the buffer limit for CHAR and RAW types. Note that widths are reported in characters if character length semantics are in effect for the column, otherwise widths are reported in bytes. *Action: Do one of the following 1. Make the LOB smaller before performing the conversion, for example, by using SUBSTR on CLOB 2. Use DBMS_LOB.SUBSTR to convert CLOB to CHAR or BLOB to RAW. ================== Видим предел 4000, а не 32K, как вам казалось. Эту проблему можно решить на стороне Oracle, а можно в Java. Про Oracle чейчас писать не буду. А в Java c CLOB надо работать как с CLOB, а не как со String. Пример с использованием JDBC: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
} ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2018, 21:25 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Partisan M, +++ Во-во! Сначала они CLOB'ы в строки читают, а потом баланс в Double свести пытаются. А потом из-за таких кто-то будет наезжать на Java, что она какая-то не такая и вообще фу... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 09:22 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Garrick, какие мы плохие PS не кто не кидает в Java какашками если вы не заметили ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 09:46 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Oleg_SP1975 не кто не кидает в Java какашками если вы не заметили Я не про тут, я вообще... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 10:13 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Garrick, а вообще любой язык программирования это инструмент которым надо уметь пользоваться и соответственно когда возникают вопросы их надо где то задавать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2018, 10:18 |
|
Выгрузка XML из Oracle c помощью java (spring)
|
|||
---|---|---|---|
#18+
Да, в своём программном примере я напрасно не привёл подробность: после использования Clob надо освобождать: Clob clob = null; clob = resultset.getClob ("my_clob"); //читаем данные из clob if (clob != null) clob.free(); //это помещать в finally {}, чтобы наверняка выполнилось. показанными способами можно прочитать CLOB любого размера. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2018, 09:37 |
|
|
start [/forum/topic.php?fid=59&gotonew=1&tid=2121887]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
10ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 177ms |
0 / 0 |