2

중첩 테이블 인 몇 개의 매개 변수가있는 저장 프로 시저가 있습니다.ODP.NET에서 중첩 테이블 매개 변수가있는 Oracle 저장 프로 시저를 호출 할 수 있습니까?

CREATE TYPE FOO_ARRAY AS TABLE OF NUMBER; 
CREATE TYPE BAR_ARRAY AS TABLE OF INTEGER; 

CREATE PROCEDURE Blah(
    iFoos IN FOO_ARRAY, 
    iBars IN BAR_ARRAY, 
    oResults OUT SOMECURSORTYPE 
) AS 
BEGIN 
    OPEN oResults FOR 
    SELECT * 
    FROM SomeTable T 
    JOIN TABLE(iFoos) foos ON foos.column_value = T.foo 
    JOIN TABLE(iBars) bars ON bars.column_value = T.bar;  
END 

사용 ODP.NET (Oracle.DataAccess.dll)이 저장 프로 시저를 호출하고이 매개 변수로 배열을 전달하는 방법은 무엇입니까? 배열을 전달하는 유일한 방법은 매개 변수 유형이 연관 배열 (SQL 내에서 액세스 할 수없는 다른 유형의 컬렉션) 인 경우입니다.

답변

1

내가 그것을 이런 식으로 일을했다 :

  • 같은 데이터베이스의 형식을 만듭니다 "를 만들거나 TYPE의 NT_LNG 교체는 VARCHAR (2)의 표는 IS;"
  • IOracleCustomType 및 INullable (SimpleStringArray)을 구현하는 클래스 만들기
  • IOracleCustomTypeFactory (SimpleStringArrayFactory)를 구현하는 클래스를 만듭니다. 이 속성 "[OracleCustomTypeMappingAttribute ("KNL.NT_LNG ")]"

로 표시하고이 같은 매개 변수를 전달합니다 : 오라클은 또한 무료 도구를 제공

1

SimpleStringArray sa1 = new SimpleStringArray(); 
sa1.Array = new String[]{"aaa","bbb"}; 
OracleParameter param = new OracleParameter("p_lngsrc", OracleDbType.Array, sa1, ParameterDirection.Input); 
param.UdtTypeName = "KNL.NT_LNG"; 

행운을

"Oracle Developer Tools for Visual Studio"(무료)를 다운로드하고 서버 탐색기를 열고 "사용자 정의 유형"노드를 열고 사용자 정의 유형을 찾은 다음, 마우스 오른쪽 버튼을 클릭하고 "Generate Custom Class"를 선택하십시오.

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/hol08/dotnet/udt/udt_otn.htm

: 여기

는 일반적으로 UDT를 시작하는 연습이다
관련 문제