Могу ли я хранить объекты BLOB в столбце типа CLOB в БД Oracle без приведения
Я использую WebSphere Message Broker, у которого есть поток сообщений, который читает сообщения XML из очереди. Если сообщения имеют тип NON STANDARD (не соответствует стандартам XML), они преобразуются в объект BLOB и проверяются в базе данных Oracle.
Проблема в том, что сообщения НЕ СТАНДАРТНЫЕ, вместо того, чтобы попасть в d / b, попадают в очередь возврата.
При исследовании я узнал, что поле, в котором хранится проверенное сообщение в базе данных, имеет тип CLOB, тогда как поток сообщений преобразует сообщение NON STANDARD в тип BLOB.
Мне было интересно, если это возможно без кастинга или преобразования..
Вот код (на ESQL), где сообщение NON STANDARD преобразуется в тип 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 );
1 ответ
С точки зрения брокера, вы можете перенести сообщение в виде BLOB, а затем отправить его в XMLNSC и выбросить исключение для нестандартных сообщений, чтобы на пути перехвата с вашего входного узла вы имели доступ к фактическому входному потоку битов, гарантирующему отсутствие преобразования. или кастинг.
Ваш код немного сбивает с толку, если предположить, что aonMsg является частью дерева ввода, тогда вы берете часть дерева сообщений UCS-2 и помещаете ее в папку с именем BLOB. Затем вы преобразуете его как CHAR (не BLOB-объект) с CCSID 819 и кодировкой администраторов очередей.
Если вы хотите создать BLOB из произвольной части дерева, вам нужно сериализовать его, используя что-то вроде "AS BITSTREAM".
В качестве альтернативы, если проблема заключается только в том, что преобразование происходит на пути к Oracle, вы можете обнаружить, что вам необходимо убедиться, что столбцы имеют правильный тип и что файл odbc.ini настроен правильно.