我可以将BLOB对象存储到Oracle DB中的CLOB类型列中而不进行强制转换

时间:2014-04-30 11:39:59

标签: xml oracle xml-parsing ibm-mq messagebroker

我正在使用WebSphere Message Broker,它有一个从队列中读取XML消息的消息流。如果消息是非标准类型(不符合XML标准),则将其转换为BLOB对象并审核到Oracle数据库。

问题是NON STANDARD消息而不是被审计到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 个答案:

答案 0 :(得分:0)

从代理的角度来看,您可以将消息作为BLOB引入,然后将其转发到XMLNSC,然后为非标准消息抛出异常,这样就可以在输入节点的catch路径上访问实际的输入比特流保证不转换或铸造。

上面的代码有点令人困惑,假设aonMsg是输入树的一部分,那么你将获取消息树的UCS-2部分并将其放在名为BLOB的文件夹中。然后,您将其转换为具有CCSID 819和队列管理器编码的CHAR(不是blob)。

如果要从树的任意部分创建BLOB,则需要使用“AS BITSTREAM”等序列化它。

或者,如果您只是问题,那就是在前往Oracle的路上发生了转换,您可能会发现需要确保列的类型正确并且odbc.ini文件设置正确。