BizTalk-使用表变量参数从Oracle存储过程生成架构

BizTalk-使用表变量参数从Oracle存储过程生成架构,biztalk,biztalk-2010,Biztalk,Biztalk 2010,我正在尝试在BizTalk中设置一个简单的示例项目,该项目获取对SQL Server数据库中的表所做的更改,并更新Oracle数据库中该表的副本 在SQL Server端,我有一个名为GetItemChanges()的存储过程,它返回可变数量的记录 在Oracle方面,我有一个名为Update_Item_Region_Table()的存储过程,该过程将记录表作为参数,以便它可以在一次调用中处理从GetItemChanges()返回的所有记录。定义如下: create or replace typ

我正在尝试在BizTalk中设置一个简单的示例项目,该项目获取对SQL Server数据库中的表所做的更改,并更新Oracle数据库中该表的副本

在SQL Server端,我有一个名为GetItemChanges()的存储过程,它返回可变数量的记录

在Oracle方面,我有一个名为Update_Item_Region_Table()的存储过程,该过程将记录表作为参数,以便它可以在一次调用中处理从GetItemChanges()返回的所有记录。定义如下:

create or replace type itemrec is OBJECT (
        UPC                VARCHAR2(15),
        REGION             VARCHAR2(5),
        LONG_DESCRIPTION   VARCHAR2(50),
        POS_DESCRIPTION    VARCHAR2(30),
        POS_DEPT           VARCHAR2(5),
        ITEM_SIZE          VARCHAR2(10),
        ITEM_UOM           VARCHAR2(5),
        BRAND              VARCHAR2(10),
        ITEM_STATUS        VARCHAR2(5),
        TIME_STAMP         VARCHAR2(20),
        COSTEDBYWEIGHT     INTEGER
);

create or replace type tbl_of_rec is table of itemrec;

create or replace PROCEDURE Update_Item_Region_table  ( Item_Data  tbl_of_rec ) 
IS
 errcode integer; 
 errmsg varchar2(4000); 
BEGIN 
   for recIndex in 1 .. Item_Data.COUNT
   loop

   update FL_ITEM_REGION_TEST set
      Region            = Item_Data(recIndex).Region,
      Long_description  = Item_Data(recIndex).Long_description,
      Pos_Description   = Item_Data(recIndex).Pos_description,
      Pos_Dept          = Item_Data(recIndex).Pos_dept,
      Item_Size         = Item_Data(recIndex).Item_Size,
      Item_Uom          = Item_Data(recIndex).Item_Uom,
      Brand             = Item_Data(recIndex).Brand,
      Item_Status       = Item_Data(recIndex).Item_Status,
      Timestamp         = to_date(Item_Data(recIndex).Time_stamp, 'yyyy-mm-dd HH24:mi:ss'),
      CostedByWeight    = Item_Data(recIndex).CostedByWeight
   where
      UPC = Item_Data(recIndex).UPC;

   log_message(Item_Data(recIndex).Region, '', 'Updated item ' || Item_Data(recIndex).UPC || '.');

   end loop;

 EXCEPTION 
 WHEN OTHERS THEN 
 errcode := SQLCODE(); 
 errmsg := SQLERRM(); 
 log_message('CE', '', 'Error in Update_Item_Region_table(): Code [' || errcode || '], Msg [' || errmsg || ']  ...'); 
END;
在BizTalk项目中,我为这两个存储过程生成架构和绑定信息。对于Oracle过程,我为GeneratedUserTypesAssemblyFilePath参数指定了一个路径,以生成包含数据类型定义的DLL。在服务器的发送端口中,我将该类型DLL的路径放入UserAssembliesLoadPath参数中

我创建了一个映射,将GetItemChanges()模式转换为Update\u Item\u Region\u Table()模式

当我运行它时,数据被很好地提取和转换,但在尝试将数据传递到Oracle proc时会导致异常:

*适配器无法通过URL将消息发送到发送端口“WcfSendPort\u OracleDBBinding\u HOST\u DATA\u Procedure\u Custom”oracledb://dvotst/". 它将在为此发送端口指定的重试间隔后重新传输。详细信息:“System.InvalidOperationException:未指定“HOST_DATA.TBL_OF_REC”的自定义类型映射或该映射无效*

因此,它显然没有将有关_REC的自定义数据类型TBL_的信息获取到类型DLL中


关于如何执行此任务的任何提示?

如果其他人在执行此类任务时遇到问题,我的问题是在生成架构和绑定文件之前没有正确设置所有属性


GeneratedUserTypesAssemblyFilePath将此标记为正确答案可能会有所帮助。
gacutil /i [path to the generated user types DLL] /f