2009-11-13 83 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