Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Выгрузка XML из Oracle c помощью java (spring) / 25 сообщений из 35, страница 1 из 2
24.07.2018, 13:34
    #39678253
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Собственно есть spring приложение которое вызывает функцию возвращаю xml в clob'е. Само взаимодействие с базой данных происходит через DAO (java классы генерятся с помощью jooq-codegen). Все работает хорошо ровно до тех пор функция не пытается вернуть clob размером около 50 килобайт. И тогда spring приложение выдает :
exception EBUG ReportsDao:130 - jOOQ; bad SQL grammar [begin ? := "WORK"."REPORTS_SERVER"."GETDOCUMENT"("IDNSF" => ?, "TYPEDOCUMENT" => ?); end;]; nested exception is java.sql.SQLException: ORA-06502: PL/SQL: ошибка числа или значения ORA-06512: на line 1


C clob'ами меньшего размерами все работает на ура

Собственно вопрос, насколько правильно мое предположение что все дело в размере и как с этим бороться?
...
Рейтинг: 0 / 0
24.07.2018, 13:35
    #39678255
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
PS

сама функция в sql developer работает на ура и возвращает clob большого размера без проблем
...
Рейтинг: 0 / 0
24.07.2018, 13:39
    #39678259
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Пример кода доступа кидайте. То, что генерятся через какую-то тулзу, ни о чем не говорит

сообщение об ошибке говорит о том, что неправильно определились типы данных. Скорее всего CLOB пытаются в PL/SQL VARCHAR2 преобразовать

Размер 50 Кб - очень странно. Вроде ограничение на размер PL/SQL VARCHAR2 - 32 Kb.

IMHO & AFAIK
...
Рейтинг: 0 / 0
24.07.2018, 13:40
    #39678263
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Leonid Kudryavtsev,

Дык функция возвращает clob а не varchar2...
...
Рейтинг: 0 / 0
24.07.2018, 13:40
    #39678264
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Oleg_SP1975
Код: sql
1.
begin ? := "WORK"."REPORTS_SERVER"."GETDOCUMENT"("IDNSF" => ?, "TYPEDOCUMENT" => ?); end;



В этом коде ? - переменные привязки. Тип первой переменной должен быть CLOB, а у Вас похоже VARCHAR2.
...
Рейтинг: 0 / 0
24.07.2018, 13:43
    #39678265
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
...
Рейтинг: 0 / 0
24.07.2018, 13:46
    #39678266
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Oleg_SP1975Leonid Kudryavtsev,

Дык функция возвращает clob а не varchar2...
То, что ф-ция возврашает CLOB, это понятно. С этим все хорошо )))
Другое дело, что Вы пытаетесь получить от Oracle. А здесь, похоже, у Вас (или в генераторе) ошибки. Вы пытаетесь получить VARCHAR2.

p.s.
PL/SQL VARCHAR2 отличается от "чисто" SQL VARCHAR2. В Oracle PL/SQL может быть 32 Kb, а "чисто" SQL максимум 4 K. (возможно цифры не точные, корректное описание ограничений смотрите в документации)
...
Рейтинг: 0 / 0
24.07.2018, 13:46
    #39678267
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Leonid Kudryavtsev,

кхм
function getDocument(idnsf number, typeDocument varchar2) return clob;
...
Рейтинг: 0 / 0
24.07.2018, 13:48
    #39678269
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Пример JAVA кода вызова данной ф-ции. Там явно ошибки.
...
Рейтинг: 0 / 0
24.07.2018, 13:52
    #39678273
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
авторLeonid Kudryavtsev,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	/**
	 * Call <code>WORK.REPORTS_SERVER.GETDOCUMENT</code>
	 */
	public static java.lang.String getdocument(org.jooq.Configuration configuration, java.lang.Number idnsf, java.lang.String typedocument) {
		ru.twokom.dao.generated.packages.reports_server.Getdocument f = new ru.twokom.dao.generated.packages.reports_server.Getdocument();
		f.setIdnsf(idnsf);
		f.setTypedocument(typedocument);

		f.execute(configuration);
		return f.getReturnValue();
	}



Этот код генерится плагином, это не мой код.
Сам код класса

Код: java
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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
/**
 * This class is generated by jOOQ
 */
package ru.twokom.dao.generated.packages.reports_server;

/**
 * This class is generated by jOOQ.
 */
@javax.annotation.Generated(value    = { "http://www.jooq.org", "3.1.0" },
                            comments = "This class is generated by jOOQ")
@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Getdocument extends org.jooq.impl.AbstractRoutine<java.lang.String> {

	private static final long serialVersionUID = -962596309;

	/**
	 * The parameter <code>WORK.REPORTS_SERVER.GETDOCUMENT.RETURN_VALUE</code>. 
	 */
	public static final org.jooq.Parameter<java.lang.String> RETURN_VALUE = createParameter("RETURN_VALUE", org.jooq.impl.SQLDataType.CLOB);

	/**
	 * The parameter <code>WORK.REPORTS_SERVER.GETDOCUMENT.IDNSF</code>. 
	 */
	public static final org.jooq.Parameter<java.math.BigDecimal> IDNSF = createParameter("IDNSF", org.jooq.impl.SQLDataType.NUMERIC);

	/**
	 * The parameter <code>WORK.REPORTS_SERVER.GETDOCUMENT.TYPEDOCUMENT</code>. 
	 */
	public static final org.jooq.Parameter<java.lang.String> TYPEDOCUMENT = createParameter("TYPEDOCUMENT", org.jooq.impl.SQLDataType.VARCHAR);

	/**
	 * Create a new routine call instance
	 */
	public Getdocument() {
		super("GETDOCUMENT", ru.twokom.dao.generated.Work.WORK, ru.twokom.dao.generated.packages.ReportsServer.REPORTS_SERVER, org.jooq.impl.SQLDataType.CLOB);

		setReturnParameter(RETURN_VALUE);
		addInParameter(IDNSF);
		addInParameter(TYPEDOCUMENT);
	}

	/**
	 * Set the <code>IDNSF</code> parameter IN value to the routine
	 */
	public void setIdnsf(java.lang.Number value) {
		setNumber(ru.twokom.dao.generated.packages.reports_server.Getdocument.IDNSF, value);
	}

	/**
	 * Set the <code>IDNSF</code> parameter to the function to be used with a {@link org.jooq.Select} statement
	 */
	public void setIdnsf(org.jooq.Field<? extends java.lang.Number> field) {
		setNumber(IDNSF, field);
	}

	/**
	 * Set the <code>TYPEDOCUMENT</code> parameter IN value to the routine
	 */
	public void setTypedocument(java.lang.String value) {
		setValue(ru.twokom.dao.generated.packages.reports_server.Getdocument.TYPEDOCUMENT, value);
	}

	/**
	 * Set the <code>TYPEDOCUMENT</code> parameter to the function to be used with a {@link org.jooq.Select} statement
	 */
	public void setTypedocument(org.jooq.Field<java.lang.String> field) {
		setField(TYPEDOCUMENT, field);
	}
}
...
Рейтинг: 0 / 0
24.07.2018, 14:02
    #39678286
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Что можно сказать - дебажить.
Кодегенератор слова про CLOB воткнул. Т.ч. скорее всего Ваше описание для генератора - правильное.

То, что падает ошибка, похоже бага внутри org.jooq.impl.AbstractRoutine<java.lang.String>

IMHO
...
Рейтинг: 0 / 0
24.07.2018, 14:09
    #39678292
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Или написать в саппорт )))
...
Рейтинг: 0 / 0
24.07.2018, 14:32
    #39678316
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Oleg_SP1975,

В JDBC с этим нет проблем см. Java API for XMLType
...
Рейтинг: 0 / 0
24.07.2018, 15:24
    #39678357
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Garrick,

у нас тут зоопарк решений на этой технологии...
переход на jdbc не решение на данный момент
...
Рейтинг: 0 / 0
24.07.2018, 16:01
    #39678388
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Oleg_SP1975Garrick,

у нас тут зоопарк решений на этой технологии...
переход на jdbc не решение на данный момент

В любом случае, Вы (библиотека) все равно используете JDBC. Проблема только в том, что где-то ошибка. Нужно отладчиком смотреть какие реально вызовы JDBC исполняются и попытаться понять, почему это так.

Тут существует два методологически разных способа решения:
1. Совестско-российский, хаккерский - найти ошибку (отладчиком) и ее исправить
2. Зарубежный - найти чесловека который сделал данную ошибки и заставить его ее исправить (обратиться в саппорт)

IMHO & AFAIK
...
Рейтинг: 0 / 0
24.07.2018, 16:03
    #39678390
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
GarrickOleg_SP1975,

В JDBC с этим нет проблем см. Java API for XMLType
Вот у автора задача значительно более простая. У него "просто" CLOB

А вот с XML Type проблем может быть выше крыши ((( Там в сложных случаях совсем все "не радостно" (((
...
Рейтинг: 0 / 0
24.07.2018, 16:51
    #39678418
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Oleg_SP1975Garrick,

у нас тут зоопарк решений на этой технологии...
переход на jdbc не решение на данный момент

JDBC драйвер уже используется в вашем приложении. Ничто не мешает вам использовать для вызова этой процедуры именно JDBC без всяких прослоек и это никак не повлияет на работу других частей приложения.
...
Рейтинг: 0 / 0
24.07.2018, 16:53
    #39678423
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Leonid KudryavtsevGarrickOleg_SP1975,

В JDBC с этим нет проблем см. Java API for XMLType
Вот у автора задача значительно более простая. У него "просто" CLOB

А вот с XML Type проблем может быть выше крыши ((( Там в сложных случаях совсем все "не радостно" (((
У него не просто CLOB, а XML в CLOB'е. По ссылке, приведённой мной выше, такие случаи описываются.
...
Рейтинг: 0 / 0
24.07.2018, 17:16
    #39678440
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
GarrickУ него не просто CLOB, а XML в CLOB'е. По ссылке, приведённой мной выше, такие случаи описываются.

а какая разница что внутри clob?
...
Рейтинг: 0 / 0
24.07.2018, 18:05
    #39678483
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Oleg_SP1975а какая разница что внутри clob?
Может быть потому, что oracle.sql.CLOB != java.lang.String.
Вы же надеюсь не станете использовать int для чтения из базы DECIMAL?
...
Рейтинг: 0 / 0
24.07.2018, 18:07
    #39678486
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
На что мапируются данные в бизнес слое - глубоко пофиг.
А что реально передается в JDBC и Oracle - пока покрыто глубоким мраком. Нужно дебагить.
...
Рейтинг: 0 / 0
24.07.2018, 18:17
    #39678496
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Leonid KudryavtsevНа что мапируются данные в бизнес слое - глубоко пофиг.
А что реально передается в JDBC и Oracle - пока покрыто глубоким мраком. Нужно дебагить.

Когда я вижу вот это... у меня возникают сомнения в корректности этого кода

Код: java
1.
public static final org.jooq.Parameter<java.lang.String> RETURN_VALUE = createParameter("RETURN_VALUE", org.jooq.impl.SQLDataType.CLOB);



Хотя никогда не работал с jOOQ и не знаю, что там у неё за Parameter такой и что делает createParameter, но какое-то там по счёту чувство мне подсказывает, что это не правильно.
...
Рейтинг: 0 / 0
24.07.2018, 18:53
    #39678514
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Garrick
Код: java
1.
public static final org.jooq.Parameter<java.lang.String> RETURN_VALUE = createParameter("RETURN_VALUE", org.jooq.impl.SQLDataType.CLOB);



Хотя никогда не работал с jOOQ и не знаю, что там у неё за Parameter такой и что делает createParameter, но какое-то там по счёту чувство мне подсказывает, что это не правильно.
а что тут вызывает Ваше сомнение?
SQLDataType.CLOB - лично мне вызывает подозрение, что бага где-то в другом месте (((
...
Рейтинг: 0 / 0
25.07.2018, 09:19
    #39678717
Oleg_SP1975
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Leonid Kudryavtsev,

весь вопрос в каком
потому что java падает вот на этой строке
Код: java
1.
f.execute(configuration);
...
Рейтинг: 0 / 0
25.07.2018, 10:06
    #39678744
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка XML из Oracle c помощью java (spring)
Leonid Kudryavtsevа что тут вызывает Ваше сомнение?
SQLDataType.CLOB - лично мне вызывает подозрение, что бага где-то в другом месте (((

То, что CLOB пытаются запихнуть в String.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Выгрузка XML из Oracle c помощью java (spring) / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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