Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
привет, всем!!!
:)
создала базу в DB2 v9 для хранения XML данных.

По документации в XML полях можно хранить до 2 ГБ информации.
При этом, когда я пытаюсь заполнить таблицу (INSERT), выдается ошибка ограничения на строку:(

SQL0102N Слишком длинная строчная константа (начинается с "'<?xml
version="1.0" encoding="utf-8"?> <document xmlns="http://www.lo").
SQLSTATE=54002


Как можно решить эту проблему?
16 июл 07, 11:15    [4391631]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
DB2Adventurer
Member

Откуда:
Сообщений: 66
Как делаете вставку? Из прикладной программы через переменные? Настройки табличного пространства для хранения xml данных какие? Вообще сам загружаемый файл сколько весит?
Скорее всего вы пытаетесь в инсерт вставить все содержимое xml-файла, именно тогда частенько выкидывает аткую ошибку

Делайте так:
DB2Command cmd = new DB2Command("insert into xt (id,xmlcomment) valuse(?,?)", connection);
cmd.Paremetres.Add(1);
cmd.Parametres.Add(xmldoc.ToString() );
cmd.ExecuteNonQuery();
16 июл 07, 11:55    [4391933]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
Это моя первая база в DB2 , вот сейчас разбираюсь, что к чему:)

Па задаче мне из Лотуса надо заполнять таблицу XML данными,

Таблица простая:
автор

id INTEGER
doc_id VARCHAR 10
doc_xml XML


Да, получается, что я пытаюсь полность вставить в запрос весь xml:
автор

insert into DB_TEST (doc_id, doc_xml) values ('docid_name','< весь текст ХМЛ>')


РАзмер вставляемого XML получается где-то 52 КВ

В редакторе команд ДБ2 такой запрос тоже не проходит:(

Можно как-то через редактор команд такое сделать?

Или можно ваш пример переделать под хранимую процедуру?
16 июл 07, 12:38    [4392244]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
DB2Adventurer

Делайте так:
DB2Command cmd = new DB2Command("insert into xt (id,xmlcomment) valuse(?,?)", connection);
cmd.Paremetres.Add(1);
cmd.Parametres.Add(xmldoc.ToString() );
cmd.ExecuteNonQuery();


По аналогии сделала тоже самое в лотусе:
'-- замена в потоке одинарных ковычек на двойные
s_v=Replace(strm_xml.ReadText,Chr(039),Chr(034))

qry.SQL = |insert into DB_TEST (doc_id, doc_xml) |+_
|values(?doc_id?, ?doc_xml?)|
		
Call result.SetParameter (1, "'docid_new'")
Call result.SetParameter (3, "'" & s_v & "'")		
		
result.Execute

Все равно ошибка:"Слишком длинная строчная константа" :(
16 июл 07, 15:09    [4393509]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
fasafsaf
Guest
а сколько символов в константе. там есть ограничение на длину.
на z/OS 255 байт, на воркстейшн вроде 32K

z/OS -- 'aaa' concat 'bbb' concat 'ccc'
на воркстейшн не нарывался
16 июл 07, 16:37    [4394326]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
Alexey Popov
Member

Откуда: Волгоград
Сообщений: 400
Не уверен, но всё же... когда создавалась таблица хранение данных LONG указывалось в TABLESPACE с размером страницы побольше? Допустим, в 32K?
16 июл 07, 16:47    [4394405]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
fasafsaf
Guest
Alexey Popov
Не уверен, но всё же... когда создавалась таблица хранение данных LONG указывалось в TABLESPACE с размером страницы побольше? Допустим, в 32K?



да это не оно. сторчная константа это литерал.

insert into aa values ( 'xxx' )
'xxx' - сторчная константа , длина = 3.
а 'xxx' || 'zzz' это уже не константа.
16 июл 07, 16:55    [4394495]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
Евгений Хабаров
Member

Откуда: Москва
Сообщений: 773
Осталось проверить в каком виде Lotus отдает запрос в DB2.
А то может оказаться, что он подставляет значения параметров и уже в таком виде отдает запрос.
Я не специалист по лотусу, нужно посмотреть как он подключается к DB2 и для этого API включить трассировку SQL. Тогда будет ясно что отдается и, возможно, появятся варианты как это исправить.
16 июл 07, 17:06    [4394592]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
А как без лотуса,
просто в Редакторе команд ДБ2
добавить в поле таблицы ХМЛ большое значение???

Потому что даже напрямую через редактор так же выдается ошибка величины константы

МОжет как-то можно через сохраняемые процедуры или импорт из файла? ?
16 июл 07, 17:33    [4394785]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
fasafsaf
Guest
jcolor
А как без лотуса,
просто в Редакторе команд ДБ2
добавить в поле таблицы ХМЛ большое значение???

Потому что даже напрямую через редактор так же выдается ошибка величины константы

МОжет как-то можно через сохраняемые процедуры или импорт из файла? ?



ну напиши CONCAT где нибудь посередине константы. разбей на две константы поменьше.
16 июл 07, 17:37    [4394806]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
fasafsaf

ну напиши CONCAT где нибудь посередине константы. разбей на две константы поменьше.


уже просто в редакторе ДБ2 делаю INSERT и вставляемое поле разбиваю при помощи CONCAT
ошибка:
несовместимость данных :(

При этом если значение ХМЛ небольшое, то нормально
16 июл 07, 19:10    [4395208]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
DB2Adventurer
Member

Откуда:
Сообщений: 66
jcolor
Это моя первая база в DB2 , вот сейчас разбираюсь, что к чему:)

Па задаче мне из Лотуса надо заполнять таблицу XML данными,

Таблица простая:
автор

id INTEGER
doc_id VARCHAR 10
doc_xml XML


Да, получается, что я пытаюсь полность вставить в запрос весь xml:
автор

insert into DB_TEST (doc_id, doc_xml) values ('docid_name','< весь текст ХМЛ>')


РАзмер вставляемого XML получается где-то 52 КВ

В редакторе команд ДБ2 такой запрос тоже не проходит:(

Можно как-то через редактор команд такое сделать?

Или можно ваш пример переделать под хранимую процедуру?


CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) LANGUAGE SQL
BEGIN
      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END
Название таблицы DB_TEST плохое :)
17 июл 07, 03:16    [4395775]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
DB2Adventurer
Member

Откуда:
Сообщений: 66
Вызовите процедуру из лотуса, должно работать.
17 июл 07, 03:17    [4395776]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
В чем ошибка при создании процедуры в редакторе команд ДБ2 ??

CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) 
      LANGUAGE SQL
BEGIN

      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END

выдается ошибка:
SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT"
17 июл 07, 17:58    [4400365]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
Тот же самый запрос по созданию хранимой процедуры сделала из лотусовского агента - сработало,
хранимая процедура создалась:)
почему невозможно это же делать в редакторе команд?
17 июл 07, 18:26    [4400509]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
fasafsaf
Guest
jcolor
В чем ошибка при создании процедуры в редакторе команд ДБ2 ??

CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) 
      LANGUAGE SQL
BEGIN

      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END

выдается ошибка:
SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT"



в символе ';'
нужно установить какой-нибудь другой символ в редакторе команд ДБ2
17 июл 07, 18:35    [4400554]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
[quot fasafsaf
в символе ';'
нужно установить какой-нибудь другой символ в редакторе команд ДБ2
[/quot]

:(
Пробовала вместо символа ";" - символы "@" и "!"
Ошибка - Обнаружен неправильный элемент :(


А как в ДБ2 запускаюся хранимые процедуры?
17 июл 07, 18:45    [4400611]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
В чем может быть ошибка при запуске процедуры:
Call JCOLOR.INSERT_XML('id_new', '<h1>text</h1>')

ОШИБКА: Значение несовместимо с типом данных назначения. Имя назначения - "P_DOC_XML
17 июл 07, 19:16    [4400714]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
Hektor
Member

Откуда: Омск
Сообщений: 181
1. Скорее всего он ищет родительский элемент.
2. У меня вылазила такая же ошибка. Видимо он воспринимает '<h1>text</h1> ' как VARCHAR

Попробуйте так
Call JCOLOR.INSERT_XML('id_new', XMLPARSE(DAOCUMENT '<root><h1>text</h1></root>'))
________________________________________________________
________________________________________________________
18 июл 07, 05:50    [4401406]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
Hektor
Member

Откуда: Омск
Сообщений: 181
jcolor
В чем ошибка при создании процедуры в редакторе команд ДБ2 ??

CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) 
      LANGUAGE SQL
BEGIN

      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END

выдается ошибка:
SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT"


-- <ScriptOptions statementTerminator="@" />

CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) 
      LANGUAGE SQL
BEGIN

      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END@
18 июл 07, 05:53    [4401408]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
Hektor
2. У меня вылазила такая же ошибка. Видимо он воспринимает '<h1>text</h1> ' как VARCHAR

Попробуйте так
Call JCOLOR.INSERT_XML('id_new', XMLPARSE(DAOCUMENT '<root><h1>text</h1></root>'))


Спасибо :) Так получилось!
18 июл 07, 12:55    [4403213]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
Hektor

-- <ScriptOptions statementTerminator="@" />

CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) 
      LANGUAGE SQL
BEGIN

      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END@


Все равно ошибка
SQL0104N Обнаружен неправильный элемент "END-OF-STATEMENT" после текста
"_DOC_ID , P_DOC_XML)".
18 июл 07, 12:58    [4403241]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
[quot DB2Adventurer]
CREATE PROCEDURE INSERT_XML(IN P_DOC_ID VARCHAR(10), IN P_DOC_XML XML ) LANGUAGE SQL
BEGIN
      INSERT INTO JCOLOR.DB_TEST (doc_id, doc_xml)  values (P_DOC_ID , P_DOC_XML);
END
[quot]

создала процедуру и из лотуса пытаюсь занести большие данные
все равно выдет ошибку на длину строковой константы :(
18 июл 07, 13:39    [4403643]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
Hektor
Member

Откуда: Омск
Сообщений: 181
Как выглядит запрос, которым вызываете ХП?
________________________________________________________
________________________________________________________
18 июл 07, 15:18    [4404582]     Ответить | Цитировать Сообщить модератору
 Re: ограничение на строку запроса!  [new]
jcolor
Member

Откуда:
Сообщений: 19
Hektor
Как выглядит запрос, которым вызываете ХП?
________________________________________________________
________________________________________________________


В агенте Лотуса вызываю ХП следующим образом:
	-текст из потока, в котором делаю замену кавычек
	text_xml=Replace(strm_xml.ReadText,Chr(039),Chr(034))

	qry.SQL = |Call JCOLOR.DB_TEST('id_new', XMLPARSE(DOCUMENT ?doc_xml?))|

	Call result.SetParameter (1, "'"& text_xml &"'")
18 июл 07, 15:33    [4404738]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить