Я успешно исключаю очередь Oracle Advanced Queue с помощью следующего кода:
OracleQueue oracleDequeueQueue = new OracleQueue("QUEUENAME", oracleConnection);
OracleQueueMessage msg = oracleDequeueQueue.Dequeue();
if (msg != null && msg.ObjectPayload != null)
{
Convert.ToString(msg.ObjectPayload["ID"])
}
Когда я пытаюсь собрать массив очереди с помощью следующего фрагмента кода, я получаю сообщение об ошибке
System.Exception: 'Тип коллекции для типа данных полезной нагрузки SCH.MDM_MESSAGE_TYPE не существует.'
OracleQueue oracleDequeueQueue = new OracleQueue("QUEUENAME", oracleConnection);
OracleQueueMessage[] msgArr = oracleDequeueQueue.DequeueArray(10);
foreach (OracleQueueMessage m in msgArr)
{
if (m != null && m.ObjectPayload != null)
{
Convert.ToString(m.ObjectPayload["ID"]));
}
}
Я также попытался добавить следующее, но это также не работает:
oracleDequeueQueue.PayloadTypeName = "SCH.MDM_MESSAGE_TYPE";oracleDequeueQueue.PayloadArrayTypeName = "SCH.MDM_MESSAGE_TYPE_ARRAY";
Что не так с моим кодом?
Это код очереди в Oracle:
create or replace type mdm_message_type as object ( id number(12 ) );
create or replace TYPE mdm_message_type_array as table of mdm_message_type;
exec DBMS_AQADM.CREATE_QUEUE_TABLE( Queue_table => '"SCH"."MDM_CUSTOMER_T"', Queue_payload_type => 'SCH.MDM_MESSAGE_TYPE');
exec DBMS_AQADM.CREATE_QUEUE( Queue_name => 'SCH.MDM_CUSTOMER', Queue_table => 'SCH.MDM_CUSTOMER_T', Queue_type => 0, Max_retries => 10000, Retry_delay => 0, dependency_tracking => FALSE);
exec dbms_aqadm.start_queue( 'SCH.MDM_CUSTOMER',true,true);