DB

loadjava oracle

Lawmin 2017. 4. 27. 17:47

java 함수를 oracle 에서 실행하고 싶을때 자주 필요하지는 않지만 유용한 기능

(매번 까먹는...)


-- 패키지 생성

CREATE OR REPLACE PACKAGE 패키지명 AS

FUNCTION 함수명(변수명 타입) RETURN 리턴타입

AS LANGUAGE JAVA

NAME 'JAVA패키지.메서드(java.lang.String) return java.lang.String';

END 패키지명;


-- loadjava 명령

loadjava -user 아이디/암호@서비스명 -schema 스키마명 -resolve -verbose 클래스.class


-- 사용

SELECT 스키마명.패키지명.함수명(val) FROM DUAL;


[예시]

CREATE OR REPLACE PACKAGE MyCrypto AS

FUNCTION encrypt(val VARCHAR2) RETURN VARCHAR2

AS LANGUAGE JAVA

NAME 'com.tistory.lawmin.MyCrypto.encrypt(java.lang.String) return java.lang.String';

end MyCrypto;


-- loadjava 명령

loadjava -user SYSTEM/PASSWORD@ORADB -schema APP_USER -resolve -verbose MyCrypto.class


-- 사용

SELECT app_user.mycrypto.encrypt('plain_text') FROM DUAL;


※ package obfuscation 을 이용하면 package를 숨길 수 있다.

(물론 이는 dbms_java.export_class 및 unwrap.py 을 이용하여 복원하는 것이 가능하긴 하다.)