powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / blob to char
35 сообщений из 35, показаны все 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
blob to char
    #39214607
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКакая версия db2 и фикспак?

v10.1
DB2 v10.1.0.872
s120403


Пример блоба отправил в ЛС
...
Рейтинг: 0 / 0
blob to char
    #39214608
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда, тут нельзя в ЛС писать... По ссылке https://dl.dropboxusercontent.com/u/80512202/blob.txt
...
Рейтинг: 0 / 0
blob to char
    #39214734
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grand,

И где же там текст-то в этом файле? Там текст в виде символов 0-9a-f, видимо, ими что-то закодировано. Что именно, это только вы можете сказать.
Первые символы:
aced000573720028636f6d2e69626d2e77732e7369622e6d66702e696d706

Я не могу воспроизвести ошибку. Я загрузил этот файл в поле с типом blob(1m). У меня все работает.
У вас тип поля message какой? Что вообще в этих полях сожержится?
...
Рейтинг: 0 / 0
blob to char
    #39214762
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Я загрузил этот файл в поле с типом blob(1m). У меня все работает.
И что получили на выходе?

авторПервые символы:
aced000573720028636f6d2e69626d2e77732e7369622e6d66702e696d706
Так это же и есть блоб, разве нет? Если выводить просто select message, то именно aced000573720028... и выводится.
авторУ вас тип поля message какой?
blob

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

вывод
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
  substr(b, 1, 10) bin
, substr( 
xmlserialize(xmlquery('$D/d/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="'||enc||'"?><d><![CDATA[')||b||blob(']]></d>')) as "D") as clob(1m)) 
, 1, 10) text
from test_blob where i=3;

 BIN                  TEXT
 -------------------- ----------
 61636564303030353733 aced000573


Это вам содержимое блоба ваша программа, которой вы select делаете, выводит, выпечатывая содержимое в hex символах.
Я не зря вас просил выгрузить блоб как файл, а не напечатать его содержимое hex символами.
...
Рейтинг: 0 / 0
blob to char
    #39214800
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinwwwlz-grand,

вывод
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
  substr(b, 1, 10) bin
, substr( 
xmlserialize(xmlquery('$D/d/text()' passing xmlparse(document blob('<?xml version="1.0" encoding="'||enc||'"?><d><![CDATA[')||b||blob(']]></d>')) as "D") as clob(1m)) 
, 1, 10) text
from test_blob where i=3;

 BIN                  TEXT
 -------------------- ----------
 61636564303030353733 aced000573


Это вам содержимое блоба ваша программа, которой вы select делаете, выводит, выпечатывая содержимое в hex символах.
Я не зря вас просил выгрузить блоб как файл, а не напечатать его содержимое hex символами.
Извинет за глупый вопрос, где выполнять call admin_cmd('... ?

P.s. запросы выполняю в IBM Data Studio
...
Рейтинг: 0 / 0
blob to char
    #39214847
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wwwlz-grandИзвинет за глупый вопрос, где выполнять call admin_cmd('... ?

P.s. запросы выполняю в IBM Data StudioВот из нее и выполняйте.
Файл с расширением .log появится в файловой системе сервера рядом с тем, который вы указали в команде.
...
Рейтинг: 0 / 0
blob to char
    #39214860
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
call admin_cmd('export to C:\temp\f.txt of del modified by lobsinsepfiles select * from esbdb2user.failedeventdetail where msgid = 'EB2D91676A2899CD_105051633'')

Обнаружен неправильный элемент "EB2D91676A2899CD_105051633" после текста "tail where msgid = '". Список возможных правильных элементов: "+".. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.63.108


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

Одинарные кавычки внутри должны дублироваться.

Код: sql
1.
call admin_cmd('export to C:\temp\f.txt of del modified by lobsinsepfiles select * from esbdb2user.failedeventdetail where msgid = ''EB2D91676A2899CD_105051633''')
...
Рейтинг: 0 / 0
blob to char
    #39215023
wwwlz-grand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, появились файлы с расширением lob, внутри битые xml. Начинаются так
Код: xml
1.
2.
3.
4.
¬н sr java.util.ArrayListxЃТ™Зaќ I sizexp   w   
sr 9com.ibm.wbiserver.manualrecovery.FailedEventParameterImpl—Ц<УЌj=ц Z 	convertedI positionL namet Ljava/lang/String;L typeq ~ L valuet Ljava/lang/Object;xp    t arg0t 
SearchRequesttl<?xml version="1.0" encoding="UTF-8"?>
<p:Se...



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


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