我正在尝试通过SSIS工作流使用自定义类型参数调用PL / SQL过程。
我尝试过:
使用用于Oracle的ADO.NET连接管理器-不起作用,因为它不允许参数映射。
使用OLEDB连接管理器-好的,但仅适用于INPUT / OUTPUT上的简单数据类型->不能解决我的问题,因为我无法使用自定义类型,并且我没有选择使用IN OUT参数(也出现在Oracle db的过程中)。
然后,我尝试通过实现用于自定义UDT映射的所有必需类和接口,通过C#进行自己的自定义映射。通过这种方式,我设法使其能够在过程中传递自定义类型参数。 (POC创建为ConsoleApplication)。
我在创建自定义类时遵循的教程:https://www.codeproject.com/Articles/1139474/ODP-NET-User-Defined-Type-Implementation
我尝试在SSIS脚本任务中使用与控制台应用程序中相同的代码。在这里我遇到了一个奇怪的问题 为了实现该过程中使用的customType,我使用了Oracle.DataAccess引用。每当我将此引用添加到脚本任务时,执行时都会出现以下错误:
DTS Script Task: Runtime Error
一旦实现使用对Oracle.DataAccess的引用的类,就会发生错误。类声明本身似乎是导致此错误的原因,即使在scriptMain中不使用它们时,该错误仍然存在。 每当我注释掉这些类(但将引用留在脚本中)时,该组件都会执行而不会出错...
配置:
我正在使用Visual Studio 2017企业版,
TargetServerVersion:SQL Server 2017
包装上的目标框架:.NET Framework 4.5
PATH Oracle客户端的环境设置:C:\ app \ client32 \ product \ 12.2.0 \ client_1 \ bin
我尝试在项目和程序包级别更改SQL Server目标,目标框架和其他设置,但没有任何效果。
任何人都知道如何解决此问题,以便可以在脚本任务中使用C#自定义映射吗?
任何其他提供带有自定义参数的调用过程的解决方案,也都欢迎:)
最后,如果有人知道一个好的自动UDT映射器,我将不胜感激:)我尝试了Odapter-好的,但是使用Oracle.ManagedDataAccess而不是DataAccess,而且我似乎无法在其中使用OracleDbType.Object ...
编辑: 我设法从引用(例如IOracleCustomType)实现接口时就出现了问题。如果仅将这种类型用作方法中的参数,则脚本将执行。一旦添加实现该接口的类,就会出现“无法加载脚本以供执行”错误。