powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / blob to char
25 сообщений из 35, страница 1 из 2
blob to char
    #39210885
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Есть база на DB2, есть поле с blob, внутри не xml и не картинки/pdf, а простой текст.

Как мне прочитать, что там написано? Гуглил очень долго, поэтому просьба просто написать пример.

Пробовал так:
Код: sql
1.
 select  cast(pole as varchar(30000)) from user.table;


в данному случае выводится blob.
Код: sql
1.
2.
3.
 SELECT BLOB(pole CONCAT ':  ') CONCAT TOPOGRAPHIC_MAP
     FROM user.table
     WHERE TOPOGRAPHIC_MAP LIKE BLOB('%Pellow Island%');


тут выдает ошибку ""TOPOGRAPHIC_MAP" недопустимо в контексте, где оно используется.. SQLCODE=-206, SQLSTATE=42703, DRIVER=3.63.108"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
  XMLCAST (
    XMLPARSE (
      DOCUMENT CAST (
        MY_CLOB_DATA AS BLOB
      ) 
      PRESERVE WHITESPACE
    ) as XML
  ) 
FROM 
MY_TABLE


Тут вылетает ошибка, что xml битая
...
Рейтинг: 0 / 0
blob to char
    #39212908
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужто никто не знает?
...
Рейтинг: 0 / 0
blob to char
    #39212937
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wwwlz-grandНеужто никто не знает?
Мало информации.

Покажите результат:
Код: plaintext
1.
describe table user.table;
describe table MY_TABLE;
(или соответствующие CREATE TABLE statements)

В случае PARSE, надо полагать XML битая. Или с точки зрения кодировки, или ещё как.
Выполните в отдельном каталоге:
Код: plaintext
db2 "export to MY_TABLE.csv of del modified by LOBSINFILE  select * from MY_TABLE"
Запостите результат (если каких закрытых данных не содержит).

PS Но за LIKE '%xxx%' (да ещё с BLOB'ами!) нужно, конечно, ...ругать.
...
Рейтинг: 0 / 0
blob to char
    #39212945
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

Добрый день.

Если в блобе текст в кодировке базы, то:
Код: sql
1.
2.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<doc>')||t.b||blob('</doc>')) as "D") as clob(100))
from table(values blob('привет, мир')) t(b);
...
Рейтинг: 0 / 0
blob to char
    #39213359
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CawaSPbwwwlz-grandНеужто никто не знает?
Мало информации.

Покажите результат:
Код: plaintext
1.
describe table user.table;
describe table MY_TABLE;
(или соответствующие CREATE TABLE statements)

В случае PARSE, надо полагать XML битая. Или с точки зрения кодировки, или ещё как.
Выполните в отдельном каталоге:
Код: plaintext
db2 "export to MY_TABLE.csv of del modified by LOBSINFILE  select * from MY_TABLE"
Запостите результат (если каких закрытых данных не содержит).

PS Но за LIKE '%xxx%' (да ещё с BLOB'ами!) нужно, конечно, ...ругать.
выполняю
Код: sql
1.
describe table esbdb2user.failedeventdetail


Выходит ошибка "Обнаружен неправильный элемент "esbdb2user" после текста "describe table ". Список возможных правильных элементов: "JOIN".. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.63.108"

Код: sql
1.
2.
3.
db2 "export to MY_TABLE.csv of del modified by LOBSINFILE  select * from esbdb2user.failedeventdetail"

Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "r.failedeventdetail"".  Список возможных правильных элементов: "JOIN <joined_table>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.63.108
...
Рейтинг: 0 / 0
blob to char
    #39213369
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinwwwlz-grand,

Добрый день.

Если в блобе текст в кодировке базы, то:
Код: sql
1.
2.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<doc>')||t.b||blob('</doc>')) as "D") as clob(100))
from table(values blob('привет, мир')) t(b);


Подскажите, пожалуйста, где тут указывать наименование таблицы, а где колонки

P.s. в DB2 я нуль
...
Рейтинг: 0 / 0
blob to char
    #39213449
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

Вместо:
Код: plaintext
1.
from table(values blob('привет, мир')) t(b)
для таблицы my_table с полем b типа blob:
Код: plaintext
from my_table t;

Если имя поля другое, то, соответственно, заменить t.b на t.my_column.
...
Рейтинг: 0 / 0
blob to char
    #39213488
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinwwwlz-grand,

Вместо:
Код: plaintext
1.
from table(values blob('привет, мир')) t(b)
для таблицы my_table с полем b типа blob:
Код: plaintext
from my_table t;

Если имя поля другое, то, соответственно, заменить t.b на t.my_column.
Код: sql
1.
2.
3.
4.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<doc>')||t.message||blob('</doc>')) as "D") as clob(100))
from esbdb2user.failedeventdetail t

В документе XML обнаружен недопустимый символ или символ, непредставимый в кодировке документа.. SQLCODE=-16103, SQLSTATE=2200M, DRIVER=3.63.108
...
Рейтинг: 0 / 0
blob to char
    #39213491
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос

Код: sql
1.
2.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<doc>')||t.b||blob('</doc>')) as "D") as clob(100))
from table(values blob('привет, мир')) t(b);


обрабатывается без ошибок, выводит "привет, мир"
...
Рейтинг: 0 / 0
blob to char
    #39213913
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand
Код: sql
1.
2.
3.
4.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<doc>')||t.message||blob('</doc>')) as "D") as clob(100))
from esbdb2user.failedeventdetail t

В документе XML обнаружен недопустимый символ или символ, непредставимый в кодировке документа.. SQLCODE=-16103, SQLSTATE=2200M, DRIVER=3.63.108


Либо там какие-то символы, которые сбивают с толку xml, либо текст не в кодировке базы.
Попробуйте выставить кодировку текста, если знаете какую, и некоторую защиту от управляющих символов в тексте:
Код: sql
1.
xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="cp1251"?><doc><![CDATA[')||t.b||blob(']]></doc>')) as "D") as clob(100))
...
Рейтинг: 0 / 0
blob to char
    #39213923
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinwwwlz-grand
Код: sql
1.
2.
3.
4.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<doc>')||t.message||blob('</doc>')) as "D") as clob(100))
from esbdb2user.failedeventdetail t

В документе XML обнаружен недопустимый символ или символ, непредставимый в кодировке документа.. SQLCODE=-16103, SQLSTATE=2200M, DRIVER=3.63.108


Либо там какие-то символы, которые сбивают с толку xml, либо текст не в кодировке базы.
Попробуйте выставить кодировку текста, если знаете какую, и некоторую защиту от управляющих символов в тексте:
Код: sql
1.
xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="cp1251"?><doc><![CDATA[')||t.b||blob(']]></doc>')) as "D") as clob(100))


Я ещё в первом посту написал, что в содержимом, скорее всего, вовсе не xml, а текст
...
Рейтинг: 0 / 0
blob to char
    #39213938
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grandЯ ещё в первом посту написал, что в содержимом, скорее всего, вовсе не xml, а текст
Стандартных функций в db2 для этого нет.
Идея в том, чтобы заставить xml ядро преобразовать blob в clob. Там это сделать можно, поэтому я и оборачиваю текст в blob в xml теги, где можно указывать кодировку, если нужно.
У меня это работает.
...
Рейтинг: 0 / 0
blob to char
    #39213952
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create or replace function blob2clob(p_b blob(1m), p_enc varchar(16))
returns clob(1m)
contains sql
deterministic
no external action
return
xmlserialize(xmlquery('$D/d/text()' passing xmlparse(
document blob(
coalesce('<?xml version="1.0" encoding="'||p_enc||'"?>', '')
||'<d><![CDATA[')
||p_b
||blob(']]></d>'
)) as "D") as clob(1m));

select i, length(b) l, b, enc
, blob2clob(b, enc) text 
, xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="'||enc||'"?><doc><![CDATA[')||b||blob(']]></doc>')) as "D") as clob(100)) text2
from test_blob;

 I L  B                                        ENC    TEXT        TEXT2
 - -- ---------------------------------------- ------ ----------- -----------
 1 11 eff0e8e2e5f22c20ece8f0                   cp1251 привет, мир привет, мир
 2 20 d0bfd180d0b8d0b2d0b5d1822c20d0bcd0b8d180 utf-8  привет, мир привет, мир
...
Рейтинг: 0 / 0
blob to char
    #39213960
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create or replace function blob2clob(p_b blob(1m), p_enc varchar(16))
returns clob(1m)
contains sql
deterministic
no external action
return
xmlserialize(xmlquery('$D/d/text()' passing xmlparse(
document blob(
coalesce('<?xml version="1.0" encoding="'||p_enc||'"?>', '')
||'<d><![CDATA[')
||p_b
||blob(']]></d>'
)) as "D") as clob(1m));

select i, length(b) l, b, enc
, blob2clob(b, enc) text 
, xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="'||enc||'"?><doc><![CDATA[')||b||blob(']]></doc>')) as "D") as clob(100)) text2
from test_blob;

 I L  B                                        ENC    TEXT        TEXT2
 - -- ---------------------------------------- ------ ----------- -----------
 1 11 eff0e8e2e5f22c20ece8f0                   cp1251 привет, мир привет, мир
 2 20 d0bfd180d0b8d0b2d0b5d1822c20d0bcd0b8d180 utf-8  привет, мир привет, мир


Подскажите, а что вместо ENC указывать? У меня же в базе нет столбца с кодировкой...
...
Рейтинг: 0 / 0
blob to char
    #39213961
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Script1.sql

create or replace function blob2clob(p_b blob(1m), p_enc varchar(16))
returns clob(1m)
contains sql
deterministic
no external action
return
xmlserialize(xmlquery('$D/d/text()' passing xmlparse(
document blob(
coalesce('<?xml version="1.0" encoding="'||p_enc||'"?>', '')
||'<d><![CDATA[')
||p_b
||blob(']]></d>'
)) as "D") as clob(1m))
select blob2clob(message, cp1251) text 
, xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="cp1251"?><doc><![CDATA[')||message||blob(']]></doc>')) as "D") as clob(100)) text2
from esbdb2user.failedeventdetail
 

Failed queries => 1
...
Рейтинг: 0 / 0
blob to char
    #39213962
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

Если вы не знаете кодировки текста, DB2 за вас этого не сможет угадать.
...
Рейтинг: 0 / 0
blob to char
    #39213970
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

Вы 2 запроса - создание функции (это я вам ее для простоты использования выражения потом привел) и ее использование слили в один запрос, да еще передаете в качестве параметра не строку 'cp1251', а литерал (без кавычек), что нельзя делать.
...
Рейтинг: 0 / 0
blob to char
    #39213973
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь ошибка


Код: sql
1.
Документ XML содержит недопустимый раздел CDATA. Код причины = "2".. SQLCODE=-16111, SQLSTATE=2200M, DRIVER=3.63.108
...
Рейтинг: 0 / 0
blob to char
    #39213979
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grandТеперь ошибка


Код: sql
1.
Документ XML содержит недопустимый раздел CDATA. Код причины = "2".. SQLCODE=-16111, SQLSTATE=2200M, DRIVER=3.63.108

Покажите, что вы сделали и делаете в точности.
...
Рейтинг: 0 / 0
blob to char
    #39213983
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выполяню запрос

авторselect xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="cp1251"?><doc><![CDATA[')||message||blob(']]></doc>')) as "D") as clob(100)) text2
from esbdb2user.failedeventdetail;
...
Рейтинг: 0 / 0
blob to char
    #39214007
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

100 байтов может не хватить.

clob(100) замените на clob(1m)
или какой там у вас размер blob'а.
...
Рейтинг: 0 / 0
blob to char
    #39214084
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заменил, ошибка та же

Код: sql
1.
2.
3.
4.
select xmlserialize(xmlquery('$D/doc/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="cp1251"?><doc><![CDATA[')||message||blob(']]></doc>')) as "D") as clob(1m)) text2
from esbdb2user.failedeventdetail

Документ XML содержит недопустимый раздел CDATA. Код причины = "2".. SQLCODE=-16111, SQLSTATE=2200M, DRIVER=3.63.108



Длина блоба 1073741824
...
Рейтинг: 0 / 0
blob to char
    #39214090
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что выдаёт

Select max(length(message)) from esbdb2user.failedeventdetail
...
Рейтинг: 0 / 0
blob to char
    #39214428
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
116485
...
Рейтинг: 0 / 0
blob to char
    #39214527
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

Какая версия db2 и фикспак?

Прикрепите содержимое блоба.
Его можно получить в отдельном файле на сервере как он есть в базе командой:

call admin_cmd('export to my_dir\f.txt of del modified by lobsinsepfiles select message from esbdb2user.failedeventdetail where ...')

В where вставьте ограничение какое-нибудь, чтоб 1 файл получился, на записи которого запрос выдает ошибку.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / blob to char
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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