ORA-29549: 클래스가 변경되었고, 자바 세션 상태가 삭제되었습니다
- 자바 만들기 (Create Java)
- 자바 함수 만들기
- 자바 함수 호출하기
- ORA-29549: 클래스가 변경되었고, 자바 세션 상태가 삭제되었습니다
오라클은 PL/SQL이라고 하는 독자적인 시스템을 도입하였습니다. PL/SQL은 SQL의 확장을 위해 프로시저와 펑션 및 여러 변수 타입을 선언하여 절차적 자료 처리가 가능하도록 합니다. 이에 더불어 오라클은 객체지향 프로그래밍 언어인 자바까지 사용이 가능하다는 것을 알고 계신가요? 오라클은 자바의 개발사인 썬 마이크로시스템즈(Sun Microsystems)를 2009년에 합병하여 자바 소프트웨어 플랫폼을 제공하고 있답니다.
이번 주제는 오라클에서 자바의 클래스를 통해 함수를 만들고 콜을 해보는 예시 자료입니다. 그리고 오라클에서 자바를 사용할 때에 흔히 발생하는 ORA-29549: class has changed java session state cleared 오류에 대해 알아보도록 하겠습니다.
자바 만들기 (Create Java)
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED JAVA_PRIMARY_NAME AS
import java.net.Socket;
public class JavaClass {
public static Socket socket;
public static String getJavaStr(String str, String str2) {
return str + str2;
}
}
자바의 문법을 그대로 적용하여 작성하면 됩니다. 간단한 예시로 import와 public class, static 변수, 그리고 [str]과 [str2] 매개변수를 더하는 간단한 메서드를 작성해 보았습니다.
Create Java 구문은 다음과 같이 작성하였습니다. 이외에도 실제 적용 가능한 문법은 더 많으니 필요 시 오라클 닥스를 참고해 주세요!
- [OR REPLACE]로 재생성 하도록 설정하였습니다.
- 소스 및 소스컴파일이 발생할 때 리졸브(컴파일) 하도록 [AND RESOLVE]를 추가합니다.
- 이름이 "JAVA_PRIMARY_NAME"인 자바 소스를 생성합니다. (소스, 리소스, 클래스 등을 지정할 수 있습니다)
자바 함수 만들기
CREATE OR REPLACE FUNCTION FUNCTION_AS_JAVA(param1 IN VARCHAR2, param2 IN VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'JavaClass.getJavaStr(java.lang.String, java.lang.String) return java.lang.String';
'FUNCTION_AS_JAVA' 라는 매개변수가 2개인 함수를 만들어 봅니다.
반환 형태는 VARCHAR2이며 참조한 자바는 앞에서 만든 'JavaClass' 클래스의 'getJavaStr' 메서드입니다.
자바 함수 호출하기
자바로 만들어진 함수를 실행해 보겠습니다. 예시는 매우 간단하게 두 문자열을 결합하는 것으로 했습니다.
SELECT FUNCTION_AS_JAVA ('A', '1') FROM DUAL;
자바를 작성 구문에서 RESOLVE 시맨틱을 추가하였습니다. 이때 컴파일 이후에 클리어 된 세션 스테이트에서 ORA-29549: 클래스가 변경되었고, 자바 세션 상태가 삭제되었습니다 오류가 발생할 수 있습니다.