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)
실제로 문제가 패키지 내에서 생성 된 모든 종류의 자바으로 표시되지 않는 것입니다 데이터 소스를 만드는 동안 accessToUnderlyingConnectionAllowed 사실 falg 설정해야합니다. 스키마 수준에서 유형을 작성하면 작동합니다. – coder
@ 코더 : PLSQL 유형은 java에서 직접 액세스 할 수 없습니다. 실제 SQL 유형 (CREATE 유형 ...)과이 SQL 유형의 랩퍼 프로 시저를 사용하거나 프로 시저를 수정하여 새 유형을 채택해야합니다. –
올바르게 이해한다면, 패키지 내에서 타입이 선언되면 PLSQL 타입이라고 할 수 있을까요? 나는 jdbc가 PLSQL 유형을 호출하지 못하면 패키지 내에서 선언되고 정의 된 프로 시저를 호출하는 방법에 대해 혼란스러워한다. 둘의 차이점은 무엇입니까? –