ORA-29549: 클래스가 변경되었고, 자바 세션 상태가 삭제되었습니다 해결하기 (ORA-29549: class has changed java session state cleared)

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' 메서드입니다.

자바 함수 호출하기

oracle java function example

자바로 만들어진 함수를 실행해 보겠습니다. 예시는 매우 간단하게 두 문자열을 결합하는 것으로 했습니다.

SELECT FUNCTION_AS_JAVA ('A', '1') FROM DUAL;
ORA-29549 클래스가 변경되었고, 자바 세션 상태가 삭제되었습니다

자바를 작성 구문에서 RESOLVE 시맨틱을 추가하였습니다. 이때 컴파일 이후에 클리어 된 세션 스테이트에서 ORA-29549: 클래스가 변경되었고, 자바 세션 상태가 삭제되었습니다 오류가 발생할 수 있습니다.

댓글