2015-02-02 8 views
1

PL/SQL 패키지에 정의 된 레코드와 동일한 패키지에 정의 된 프로 시저가있는 경우 .NET에서 "레코드"유형을 작성할 수 있습니까? C#) 쪽을 선택하고 t_my_rec 유형을 사용하여 프로 시저에 전달합니다. UDT (Oracle 사용자 정의 데이터 형식)를 사용하여이 작업을 수행 할 수 있지만 관리되는 드라이버를 사용하고 있으므로 아직 지원되지 않습니다.Managed ODP.NET에서 Oracle으로 레코드 유형 전달 절차

TYPE t_arr_my_rec IS TABLE OF t_my_rec INDEX BY PLS_INTEGER; 

TYPE t_my_rec IS RECORD 
(
    item_id items.item_id%type, 
    item_name items.item_name%type 
); 

PROCEDURE insert_my_rec 
(
    p_my_rec in t_my_rec 
); 

PROCEDURE bulk_insert_my_rec 
(
    p_my_recs in t_arr_my_rec 
); 

이상적으로는 삽입 문 FORALL 대량 작업을 수행 할 테이블의 모든 단일 항목에 대한 배열 타입을 정의하지 않도록하고 싶습니다.

정말 도움을 주셔서 감사합니다!

답변

1

UDT 외부에서 ODP.net의 Oracle 형식 선언을 처리 할 수 ​​없다고 생각합니다. 그렇더라도 패키지가 아닌 데이터베이스에서 형식 선언을 사용했을뿐입니다.

XML 개체에서 개체 컬렉션을 전달하고 양방향으로 파싱하는 것도 고려해 볼 수 있습니다. 이렇게하면 스트링을 생성/검증/파싱하는 오버 헤드와 몇 바이트가 아닌 문자열로 숫자를 전달하는 데이터 오버 헤드가 발생하지만 구조를 정의 할 수 있습니다.

지옥, 옛날에는 UDT 나 XML을 지원하기에 앞서 CLOB에 많은 데이터를 채워 넣고 구문 분석에 동의했다가 한꺼번에 파싱하는 것을 기억합니다. 만약 당신이 결코 데이터 객체를 변경하려고하지 않는다면 잘 작동합니다. 그렇지 않으면 뒤집기 유지 보수 악몽. 그러나 할 수있다.

0

불가능합니다. 여러 개의 SProc 매개 변수로 레코드를 병합하거나, 임시 테이블을 사용하는 등의 다른 기술을 사용해야합니다.

다음은 OTN 포럼의 관련 스레드입니다. https://community.oracle.com/thread/3620578

0

나는 비슷한 문제가있었습니다. 레코드의 각 필드에 대해 연관 배열을 사용하여 해결했습니다. PL/SQL 유형의 단일 출력 매개 변수를 갖는 대신 레코드의 테이블에는 열만큼 많은 매개 변수가 있습니다. 패키지에서 varchar2와 number의 두 가지 기본 유형의 연관 배열을 정의했습니다.

CREATE OR

type t_tbl_alfa is table of varchar2(50) index by binary_integer; 
type t_tbl_num is table of number index by binary_integer; 
AS 패키지 XXX 교체