c# - '有效载荷数据类型 MSG_TYPE 的集合类型不存在。'
问题描述
我通过以下代码成功地将 Oracle 高级队列出列:
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);
解决方案
使用 DequeueArray 方法时,Oracle 中必须具有以下数组类型:
CREATE TYPE MESSAGE_ARRAY IS VARRAY (100) OF MESSAGE_TYPE_NAME
请注意,在 Oracle 中创建的 MESSAGE_TYPE_NAME 数组的长度应等于或大于 .NET 代码中 DequeueArray 方法中的参数值。
推荐阅读
- visual-studio-code - 如何隐藏 VSCode 更新对话框
- omnet++ - 在 Castalia 中模拟恒定、欺骗性、反应性和随机干扰器
- python - 在 Jupyter Notebook 中,代码片段中错误输出的着色如何帮助我找出错误?
- javascript - 如何在 Google Chrome 中关闭 Preserve JavaScript console perseverance
- ansible - ansible Galaxy 角色的命令/模块名称与内置的 runit 模块冲突
- node.js - 从 Google Cloud Storage 获取绝对文件路径以用于 pdf-text-extract
- scala - 如何收集错误是scala,然后将它们全部放在一起
- asp.net-mvc - ASP.NET MVC / Core and Entity Framework 6 / Core - 配置和验证
- python - 字段值在列表中的 Django 查询集
- arrays - MongoDB具有唯一值的多个数组