Преобразование большого двоичного объекта в VARCHAR вместо VARCHAR ДЛЯ БИТ

#db2 #db2-luw

#db2 #db2-luw

Вопрос:

У меня есть поле большого двоичного объекта в таблице, которую я выбираю. Данные этого поля состоят только из данных JSON.

Если я сделаю следующее:

 Select CAST(JSONBLOB as VARCHAR(2000)) from MyTable
 

—> это возвращает значение в VARCHAR ДЛЯ формата БИТОВЫХ ДАННЫХ.

Я просто хочу, чтобы это было как стандартная строка или varcher — не в битовом формате.

Это потому, что мне нужно использовать функцию JSON2BSON для преобразования JSON в BSON. JSON2BSON принимает строку, но не принимает VarChar для БИТОВОГО типа ДАННЫХ…

Этот разговор должен быть простым.

Я могу выполнить выбор в качестве ПЕРЕМЕННОЙ для БИТОВЫХ ДАННЫХ .. Вручную СКОПИРУЙТЕ его с помощью пользовательского интерфейса. Вставьте его в литерал select и преобразуйте его в BSON. Мне нужно перенести кучу данных в этом большом двоичном объекте из JSON в BSON, и выполнение этого вручную не будет быстрым. Я просто хочу объяснить, насколько простым должен быть вариант использования.

Какова команда select, чтобы заставить это работать:

   Select JSON2BSON(CAST(JSONBLOB as VARCHAR(2000))) from MyTable
 

—> В настоящее время это не удается, потому что ПРИВЕДЕНИЕ преобразует это (даже если это только текстовые символы) в VARCHAR для БИТОВОГО типа ДАННЫХ, а не стандартного VARCHAR .

Каково предложение исправить это?

DB2 11 в Windows.

Ответ №1:

Если данные представляют собой JSON, то столбец таблицы должен быть CLOB в первую очередь…

Наличие столбца таблицы в виде большого двоичного объекта может иметь смысл, если данные на самом деле уже являются BSON.

Комментарии:

1. Должно быть, но его нет.

Ответ №2:

Вы можете превратить большой двоичный объект в сгусток, используя процедуру converttoclob, тогда все должно быть в порядке.

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0055119.html

Ответ №3:

Вы можете использовать эту функцию для удаления флага «ДЛЯ БИТОВЫХ ДАННЫХ» в столбце

 CREATE OR REPLACE FUNCTION DB_BINARY_TO_CHARACTER(A VARCHAR(32672 OCTETS) FOR BIT DATA)
    RETURNS VARCHAR(32672 OCTETS)
    NO EXTERNAL ACTION
    DETERMINISTIC
BEGIN ATOMIC
    RETURN A;
END
 

или, если вы используете Db2 11.5, функция SYSIBMADM.UTL_RAW.CAST_TO_VARCHAR2 также будет работать