Могу ли я хранить объекты BLOB в столбце типа CLOB в БД Oracle без приведения

Я использую WebSphere Message Broker, у которого есть поток сообщений, который читает XML-сообщения из очереди. Если сообщения имеют НЕСТАНДАРТНЫЙ тип (не соответствующий стандартам XML), они преобразуются в объект BLOB и проверяются в базе данных Oracle.

Проблема заключается в том, что НЕСТАНДАРТНЫЕ сообщения вместо проверки в d/b попадают в очередь возврата.

При расследовании я узнал, что поле, в котором хранится проверенное сообщение в базе данных, имеет тип CLOB, тогда как поток сообщений преобразует НЕСТАНДАРТНОЕ сообщение в тип BLOB.

Мне было интересно, возможно ли это без литья или преобразования.

вот код (в ESQL), где НЕСТАНДАРТНОЕ сообщение преобразуется в тип BLOB:

MOVE aonMSG TO "OutputRoot"."BLOB";
SET msgChar = aonMSG;
SET messageType = 'NON_STANDARD_MESSAGE';
SET msgChar = CAST(OutputRoot."BLOB"."BLOB" As CHAR CCSID 819 ENCODING  
OutputRoot.MQMD.Encoding );

person HyperioN    schedule 30.04.2014    source источник


Ответы (1)


С точки зрения брокера вы можете передать сообщение как BLOB, а затем RCD его в XMLNSC позже и создать исключение для нестандартных сообщений, таким образом, на пути перехвата от вашего входного узла у вас есть доступ к фактическому входному битовому потоку, гарантирующему отсутствие преобразования или литье.

Ваш приведенный выше код немного сбивает с толку, если предположить, что aonMsg является частью дерева ввода, тогда вы берете часть дерева сообщений UCS-2 и помещаете ее в папку с именем BLOB. Затем вы передаете это как CHAR (не большой двоичный объект) с CCSID 819 и кодировкой администраторов очередей.

Если вы хотите создать BLOB из произвольной части дерева, вам нужно сериализовать его, используя что-то вроде «AS BITSTREAM».

В качестве альтернативы, если проблема заключается только в том, что преобразование происходит на пути к Oracle, вам может потребоваться убедиться, что столбцы имеют правильный тип и что файл odbc.ini настроен правильно.

person Dave    schedule 30.04.2014