2014-07-15 1 views
0

과 같은 Oracle 형식의 C#에서 저장 프로 시저 호출 Oracle.DataAccess 라이브러리를 사용하여 Oracle 저장 프로 시저를 실행하는 중 C#에서 문제가 발생했습니다.CustomType 테이블

오라클에는이 구조가 있습니다.

CREATE OR REPLACE TYPE O_MOV_STATION_STATUS AS OBJECT 
      (
     StationT NUMBER(10), 
     StationN  NUMBER(10), 
     Stat   NUMBER(3), 
     Loaded   NUMBER(1), 
     Capacity  NUMBER(10), 
     CurrentCount NUMBER(10), 
     Box   NUMBER(10) 
     ); 

프로 시저가 정의 :

PROCEDURE UPDATE_STATIONS(pn_warehouse_id_in IN wms_warehouse.warehouse_id%TYPE, 
          prl_sta_status_in IN o_mov_lst_sta_status, 
          pn_error_code_out OUT NUMBER, 
          pv_error_text_out OUT NOCOPY VARCHAR2); 

C에서 # 코드는 다음과 같다 : 일단

public struct O_Mov_Station_Status 
     { 
      public decimal StationT;//  NUMBER(10), 
      public decimal StationN;//  NUMBER(10), 
      public decimal Stat;//   NUMBER(3), 
      public decimal Loaded;//   NUMBER(1), 
      public decimal Capacity;//  NUMBER(10), 
      public decimal CurrentCount;//  NUMBER(10), 
      public decimal Box;//   NUMBER(10) 
     } 

     public struct Lst_O_Mov_Station_Status 
     { 
      public IList<O_Mov_Station_Status> Lst_Station_Status; 
     } 
... Initializing vars and objects ... 

OracleCommand cmd = new OracleCommand("MyPackage.UPDATE_STATIONS", con); 
      cmd.CommandType = System.Data.CommandType.StoredProcedure; 

      //Oracle Parameter 
      OracleParameter objParam = new OracleParameter(); 

      objParam = new OracleParameter("PN_WAREHOUSE_ID_IN", OracleDbType.Decimal); 
      objParam.Direction = System.Data.ParameterDirection.Input; 
      objParam.Value = 20000; 
      cmd.Parameters.Add(objParam); 

      objParam.Dispose(); 
      objParam = new OracleParameter("prl_sta_status_in", OracleDbType.Object); 
      objParam.OracleDbType = OracleDbType.Object; 
      objParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray; 
      objParam.Direction = System.Data.ParameterDirection.Input; 
      objParam.UdtTypeName = "O_MOV_STATION_STATUS"; 
      objParam.Value = lSS; 
      objParam.DbType = System.Data.DbType.Object; 
      cmd.Parameters.Add(objParam); 

      objParam.Dispose(); 
      objParam = new OracleParameter("PN_ERROR_CODE_OUT", OracleDbType.Decimal); 
      objParam.Direction = System.Data.ParameterDirection.Output; 
      cmd.Parameters.Add(objParam); 

      objParam.Dispose(); 
      objParam = new OracleParameter("PV_ERROR_TEXT_OUT", OracleDbType.Varchar2); 
      objParam.Direction = System.Data.ParameterDirection.Output; 
      cmd.Parameters.Add(objParam); 

      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 

다음

CREATE OR REPLACE TYPE O_MOV_LST_STA_STATUS AS TABLE OF O_MOV_STATION_STATUS;o_mov_lst_sta_status 

하고 유형 설명한다 나는 ExecuteNonQuery()를 실행한다. 나는 thi를 얻는다. ■ 오류 : OracleParameter.Value가 올바르지 않습니다.

누구나이 목록을 저장 프로 시저의 매개 변수로 보낼 수 있습니까? 내가 필요로하는 목록이

너무 감사 오라클

에서 사용자 정의 유형의 표입니다

알 수 있습니다.

감사합니다.

답변

0

OracleCollectionType.PLSQLAssociativeArray은 일반 유형의 PL/SQL 연관 배열을 의미합니다.

CREATE OR REPLACE TYPE O_MOV_STATION_STATUS AS TABLE OF NUMBER INDEX BY INTEGER; 

내가 아는 한 복잡한 개체 유형을 사용할 수 없습니다. 테이블의 각 레코드에 대해 루프를 수행하거나 PL/SQL에 함수를 작성하여 오브젝트를 랩핑한다고 가정합니다.

관련 문제