#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, тогда все должно быть в порядке.
Ответ №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
также будет работать