맛있는감귤

오라클에서 자바 클래스 생성(한글 인코딩) 본문

DB/Oracle

오라클에서 자바 클래스 생성(한글 인코딩)

맛있는감귤 2019. 7. 17. 13:51

원격지 DB의 캐릭터셋이 WEB8ISO8859P1 , 로컬 DB은 UTF-8로 구성되어 있어서 이를 한글로 가져오는데 많은 애를 먹었습니다.

오라클의 CONVERT함수나 원격지에서 바이트변환을 하여 로컬에서 다시 인코딩을 해보라는 등 많은 글이 있었지만 모두 허사였습니다.

WEB8ISO8859P1 캐릭터셋과 UTF-8의 한글 byte길이가 다르기 때문인것 같습니다.

헌데 자바에서는 인코딩이 잘되더군요. 해당 메소드를 오라클로 옮겨와서 함수화시켜서 사용해보니 제대로 인코딩이 되었습니다.

클래스 생성

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "Encoding" AS

	public class Encoding {

		public static String convertCharSet(String str) throws Exception {
            String src = "ISO-8859-1";
            String tar = "EUC-KR";
			String rValue = "";
			String sValue = String.valueOf(str);
			if(str != null) {
					rValue = new String(sValue.getBytes(src), tar);
			}
			return rValue;
		}
	};

Encoding 클래스를 만들고 그 안에서 인코딩해주는 메소드를 생성했습니다.

소스캐릭터셋(src)은 원하는대로 설정해주세요.

오라클 함수 생성

CREATE OR REPLACE FUNCTION convertCharSet(str VARCHAR2)
  RETURN VARCHAR AS
		language java name 'Encoding.convertCharSet(java.lang.String) return java.lang.String';

위처럼 오라클에 생성한 클래스를 불러오는 함수를 정의해줍니다.

예제

SELECT convertCharSet('한글') FROM DUAL;

위 구문처럼 사용하시면됩니다.

클래스 삭제

DROP JAVA SOURCE "Encoding";