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 을 이용하여 복원하는 것이 가능하긴 하다.)