我想要做的是使用Synchronous Capture从 Java 进程订阅 Oracle 表中的所有更改。
ANYDATA 队列是用
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'hcb_qtab_any',
queue_name => 'hcb_queue_any',
queue_user => 'gguser');
END;
然后我使用Dequeue 中的代码,使用 Java for Oracle 11g 队列作为示例。我正在尝试做
message = queue.dequeue(deq_option, XMLType.getORADataFactory());
但我得到的只是oracle.AQ.AQOracleSQLException
:创建描述符时出错:Invalid arguments
。事实证明,我已经对其进行了一些调试,因为 ANYDATATypeDescriptor.getTypeDescriptor()
将返回不被视为StructDescriptor.isValidObject()
.
我使用瘦 JDBC AQ 进行了另一次拍摄:
AQDequeueOptions deqopt = new AQDequeueOptions();
deqopt.setConsumerName("subscriber1");
AQMessage msg = conn.dequeue("hcb_queue_any", deqopt, "SYS.ANYDATA");
OPAQUE opq = (OPAQUE)msg.getANYDATAPayload().accessDatum();
我在这里面临一个新的独特问题。这个 OPAQUE 有getDescriptor().getTypeName() == "XMLTYPE"
,所以我很想把它转成 XML。但是有一个问题:只有瘦JDBC驱动支持AQ,而只有ACI驱动支持OPAQUE转XML。我Only LOB or String Storage is supported in Thin XMLType
尝试做的时候出错了new XMLType(opq)
如何使用 JDBC 从 AQ获取同步捕获 XML ?