使用嵌套表用户定义类型执行Oracle过程 [英] Executing Oracle Procedure With Nested Table User Defined Types

查看:62
本文介绍了使用嵌套表用户定义类型执行Oracle过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我们正在尝试从BizTalk接收位置调用oracle过程。此过程确实定义了OUT参数,该参数是用户定义类型。此用户定义类型是我们创建的嵌套对象类型,用于从Oracle数据表中提取父子层次结构
数据。 

We are trying to invoke an oracle procedure from BizTalk receive location. This procedure does have OUT parameter defined which is of User Defined Type. This User defined type is a nested object type which we created in order to extract parent child hierachy data from Oracle data table. 

创建或替换TYPE tblType是rowType的表;

create or replace TYPE tblType is table of rowType;

创建或替换TYPE NestedRow作为对象(

Id NUMBER(22,0),

项目RPRO_LINE_STG_G_TABLE

create or replace TYPE NestedRow as object(
Id NUMBER(22,0) ,
Items RPRO_LINE_STG_G_TABLE
)

创建或替换TYPE NESTED_TABLE是NestedRow表; 

create or replace TYPE NESTED_TABLE is table of NestedRow ;

存储过程定义如下,

PROCEDURE sampleProcedure(v_NESTED_TABLE OUT NESTED_TABLE )

PROCEDURE sampleProcedure(v_NESTED_TABLE OUT NESTED_TABLE )

我能够创建过程并从SQL开发人员执行它。它按预期返回数据。我也可以为此过程生成模式。生成的模式是用户定义类型中定义的父子层次结构。但是,当我尝试从BizTalk接收位置调用此过程时,我收到错误
。 BizTalk接收位置使用WCF-Custom适配器和XMLReceive管道。

I am able to create procedure and execute it from SQL developer. It is returning data as expected. I am also able to generate schemas for this procedure. Schemas generated were of the parent-child hierarchy as defined in User Defined Type. But, I am getting an error when I try to invoke this procedure from BizTalk receive location. BizTalk receive location is using WCF-Custom adapter and XMLReceive Pipeline.

错误:

适配器"WCF-Custom"提出了一条错误信息。详细信息" System.NullReferenceException:对象引用未设置为对象的实例。

  在Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteComplexArray(XmlDictionaryWriter writer,OracleStructuredTypeMetadata typeMetadata,Object objVal,MetadataLookup mMetadataLookup,OracleCommonExecutionHelper
executionHelper)

  在Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteComplexType(XmlDictionaryWriter writer,StructuredTypeMetadata typeMetadata,Object objVal,MetadataLookup metadataLookup,OracleCommonExecutionHelper
executionHelper)

  在Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteComplexArray(XmlDictionaryWriter writer,OracleStructuredTypeMetadata typeMetadata,Object objVal,MetadataLookup mMetadataLookup,OracleCommonExecutionHelper
executionHelper)

  在Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteTopLevelParameter(XmlDictionaryWriter writer,String displayName,QualifiedTypeContainer p,IOracleMetadataProperties metadataProperties,OracleParameter
oracleParameter,String topLevelNameSpace)

  在Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteParameters(XmlDictionaryWriter writer)

  在Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.OnWriteBodyContents(XmlDictionaryWriter writer)

  在System.ServiceModel.Channels.BodyWriterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)

  在Microsoft.Adapters.AdapterUtilities.AdapterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)

  在Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WrapperMessage.OnWriteBodyContents(XmlDictionaryWriter writer)

   在Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfMarshaller.CreateBizTalkMessageStream(消息wcfMessage,IAdapterConfigInboundMessageMarshalling配置,TLConfig tlConfig,RLConfig rlConfig)

  在Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfMarshaller.CreateBizTalkMessage(IBaseMessageFactory messageFactory,IAdapterConfigInboundMessageMarshalling marshallingConfig,Message wcfMessage,TLConfig tlConfig,
RLConfig rlConfig)

< span style ="font-size:11.0pt">  在Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfMarshaller.CreateBizTalkSubmitMessage(IBaseMessageFactory factory,String inboundTransportLocation,String inboundTransportType,RLConfig config,Message wcfMessage,
String ssoToken)

  在Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkSubmitBase..ctor(消息消息,BizTalkEndpointContext endpointContext,ControlledTermination控件,AsyncCallback realCallback,String ssoToken)

&NBSP;&NBSP;在Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkSubmit..ctor(消息消息,AsyncCallback回调,对象状态,BizTalkEndpointContext endpointContext,String ssoToken,ControlledTermination控件)

< span style ="font-size:11.0pt">  在Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkOperation.Create(消息消息,AsyncCallback回调,对象状态,字符串ssoToken,布尔bizTalkOneWay,BizTalkEndpointContext endpointContext,ControlledTermination
控制)

  在Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.BeginOperation(消息消息,AsyncCallback回调,对象状态,布尔bizTalkOneWay)




谢谢,Pavan MCTS-Microsoft Biztalk Windows Server 2010

Thanks, Pavan MCTS-Microsoft Biztalk Windows Server 2010

推荐答案

Hi Pavan,

Hi Pavan,

参考类似的讨论:  https://social.msdn.microsoft.com/Forums/en-US/b5ac8c2d-0b94-4c7b-8eb7-0b1280bb4c20 / wcforacledb-null-reference-exception?forum = biztalkr2adapters

Refer similar discussion: https://social.msdn.microsoft.com/Forums/en-US/b5ac8c2d-0b94-4c7b-8eb7-0b1280bb4c20/wcforacledb-null-reference-exception?forum=biztalkr2adapters

其中一个限制是 
Oracle数据库适配器最多只支持两个级别的UDT嵌套。
T 他认为UDT嵌套限制在2个级别是因为ODP.NET
意外地表现出更高的嵌套级别。


这篇关于使用嵌套表用户定义类型执行Oracle过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆