2009-11-13 67 views
1

我有这样的类型:输出参数odp.net

TYPE tipo_TableVarchar2 IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER; 

和程序get_array (p_arr out TableVarchar2)是...

OracleParameter param = new OracleParameter(); 
param.OracleDbType = OracleDbType.Varchar2; 
param.CollectionType = OracleCollectionType.PLSQLAssociativeArray; 
param.ParameterDirection = ParameterDirection.Output; 

cm.Parameters.Add(param); 

如何使用OracleParameter的输出来获取值?

+0

[Oracle过程未从SSIS上的脚本任务执行时返回结果]的可能重复(http://stackoverflow.com/questions/31380644/oracle-procedure-is-not-returning-results-when-executing- from-script-task-on-ssi) – 2015-07-17 02:49:54

回答

1

查看Oracle 11g odp.net驱动程序,该驱动程序允许您传递Oracle类型。 有Oracle的网站上一些样品,以及在你家11克的安装目录... C:\ ORACLE \ Ora11g_Home \ odp.net \样本\ 2.X \ UDT

我不得不退出返回此示例中的对象类型。

你有这样的事情......

 OracleParameter p_params = new OracleParameter(); 
     p_params.ParameterName = "params"; 
     p_params.OracleDbType = OracleDbType.Object; 
     p_params.Direction = ParameterDirection.InputOutput; 
     // Note: The UdtTypeName is case-senstive 
     p_params.UdtTypeName = "SCHEMA_NAME.TYPE_NAME"; 

您还需要一个类来定义你的类型。 对“OracleObjectMappingAttribute”和“IOracleCustomTypeFactory”执行一些搜索。

备注 - 我使用11g odp.net驱动程序来打10g数据库。您只需要在您的项目中引用以下.dll:oci.dll,oraociicus11.dll和OraOps11w.dll。您应该已经在引用Oracle.DataAccess.dll(只需确保您开始使用11g版本)。

+0

这是一个老问题,但实际上,所有错综复杂的事情都是这样做的http://stackoverflow.com/a/31387136/1704458 – 2015-07-17 02:49:04