2010-01-14 6 views
2

ASP.NET의 방법 VArray를 허용하는 Oracle 패키지에서 저장 프로 시저를 호출 할 수 있습니다. VArray는 저장 프로 시저가 적절한 레코드를 수정하는 데 사용할 키 목록을 전달합니다. 별도의 호출로 키를 보내거나 구분 된 목록을 보낼 수는 있지만 배열을 사용하고 싶습니다.Oracle 11g 호출 C# VARRAY 매개 변수가있는 프로 시저

답변

2

(어쨌든 System.Data.OracleClient를 사용해서는 안)은 ODP.NET을 사용하는 가정, 여기에 그것을 할 방법은 없습니다 :

using System; 
using System.Data; 
using Oracle.DataAccess.Client; 

class SomeClass 
{ 
    void SomeMethod(string connectionString, int[] anArrayOfKeys) 
    { 
     using (var con = new OracleConnection(connectionString)) 
     using (var cmd = con.CreateCommand()) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "StoredProcedureNameGoesHere"; 
      cmd.Parameters.Add(
       "ParameterNameGoesHere", 
       OracleDbType.Array, 
       anArrayOfKeys, 
       ParameterDirection.Input); 

      con.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
-1

Did you try this

OracleCommand cmd = OracleConnection1.CreateCommand(); 
cmd.CommandText = "INSERT INTO ArrayTable VALUES (:CODE, :TITLE, : ARR1, :ARR2)"; 
... 
OracleArray arr1 = new OracleArray("SCOTT.TARRAY1", OracleConnection1); 
arr1.Add(10); 
arr1.Add(20); 
arr1.Add(30); 
... 
cmd.Parameters["ARR1"].DbType = OracleDbType.Array; 
cmd.Parameters["ARR1"].Value = arr1; 
... 
cmd.ExecuteNonQuery(); 
+0

내가 그것을 시도하지 않은 없음 또한 저장 프로 시저 (단순한 삽입 이상을 수행 할 수 있음)를 호출하는 대신 테이블에 직접 삽입 할 때 내 요구 사항을 충족시키지 않습니다. 당신이 오라클 배열 타입 (SCOTT.TARRAY1)을 참조하고있는 것처럼 보입니다. –

+0

처음에는 링크를 알지 못했습니다. 이 솔루션은 또한 devart에서 dotConnect를 구입해야합니다. –

관련 문제