2009-09-09 3 views
2

oracle 저장 프로 시저에 액세스하는 Java 응용 프로그램이 있습니다. 저장 프로 시저의 인수에는 배열 형식이 포함됩니다. 나는이 예외를 얻고, 지금은 ... 다음과 같은oracle 저장 프로 시저에서 java - passing 배열

con = this._getConnection(); 
Connection narrowdConn = (Connection)WSJdbcUtil.getNativeConnection((WSJdbcConnection)con); 

callable = con.prepareCall("{call MY_PKG.MY_PROCEDURE(?, ?)}"); 


ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("VARCHAR2_ARR", narrowdConn); 
ARRAY arrayArg1 = new ARRAY(arrayDescriptor, con, docNames); 
ARRAY arrayArg2 = new ARRAY(arrayDescriptor, con, docTypes); 

callable.setArray(1, arrayArg1); 
callable.setArray(2, arrayArg2); 

callable.execute(); 

그것을 할 ...

java.sql.SQLException: invalid name pattern: MY_PKG.VARCHAR2_ARR 

VARCHAR2_ARR는 다음과 같이 오라클 패키지 내부에 정의 된 공공 TYPE은 다음과 같습니다

TYPE VARCHAR2_ARR은 VARCHAR2 (50)의 테이블입니다.

그리고 내 저장된 프로 시저에서와 같은 사용 ...

PROCEDURE MY_PROCEDURE 
    (V_ARR_ARG1 IN VARCHAR2_ARR, 
    V_ARR_ARG2 IN VARCHAR2_ARR) 

답변

1

유형 VARCHAR2_ARR은 PLSQL 유형, 당신은 자바에서 직접 인터페이스 할 수 없습니다. 비슷한 질문에 대해서는 this thread on AskTom을 살펴 보시기 바랍니다. 여기

은 몇 가지 제안 사항 :

  • 당신이 모두에서 PLSQL에서에서

을 자바에서 임시 테이블에 자바에서

  • 인서트를 결합하고 읽을 수있는 SQL 유형을 만들 PLSQL 프로 시저를 수정하거나 새 번역 프로 시저를 추가해야합니다.

  • +0

    실제로 문제가 패키지 내에서 생성 된 모든 종류의 자바으로 표시되지 않는 것입니다 데이터 소스를 만드는 동안 accessToUnderlyingConnectionAllowed 사실 falg 설정해야합니다. 스키마 수준에서 유형을 작성하면 작동합니다. – coder

    +0

    @ 코더 : PLSQL 유형은 java에서 직접 액세스 할 수 없습니다. 실제 SQL 유형 (CREATE 유형 ...)과이 SQL 유형의 랩퍼 프로 시저를 사용하거나 프로 시저를 수정하여 새 유형을 채택해야합니다. –

    +0

    올바르게 이해한다면, 패키지 내에서 타입이 선언되면 PLSQL 타입이라고 할 수 있을까요? 나는 jdbc가 PLSQL 유형을 호출하지 못하면 패키지 내에서 선언되고 정의 된 프로 시저를 호출하는 방법에 대해 혼란스러워한다. 둘의 차이점은 무엇입니까? –

    0

    우리는

    관련 문제