자바개발자로 SQL에서 지원하지 않는 기능을 SQL로 구현해야 할 때가 있다.
이럴 땐 어떻게 해야 할까?
- SQL에 없는 기능을 자바 프로그램 소스를 활용해서 만들어 본다.
1. 자바 소스를 이용하여 오라클 내장 자바 클래스 생성
Syntax)
- CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "클래스이름" AS 자바문법
EX) 샘플 자바 소스
- 문자열 SHA-256 암호화
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "PasswordEncoder{" AS
import java.lang.*;
import java.io.*;
public class PasswordEncoder{
public static String encode(String passwd){
try {
if (passwd != null && !passwd.equals("")) {
java.security.MessageDigest digest = java.security.MessageDigest.getInstance("SHA-256");
byte[] bytData = passwd.getBytes();
digest.update(bytData);
byte[] buffer = digest.digest();
passwd = "";
for (int i = 0; i < buffer.length; i++) {
passwd = passwd + Integer.toHexString(buffer[i] & 0xFF).toUpperCase();
}
}
return passwd;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
2. 생성한 자바 객체를 이용하여 오라클 함수 생성하기
- 기본 함수 생성 문법 + as LANGUAGE JAVA NAME
- 기본 함수 Syntax)
CREATE [OR REPLACE] FUNCTION function_name
[(argument1 [mode1] datatype [{:= | DEFAULT} expression]
[,argument2 [mode2] datatype [{:= | DEFAULT} expression], . . .])]
RETURN data_type
{IS | AS}
BEGIN
pl/sql_block;
END;
- 자바 객체를 이용한 함수 Syntax)
FunctionName(parameter) return DataType as LANGUAGE JAVA NAME 'class.method(param) return DataType';
EX) 위에 문자열 SHA-256 암호화 JAVA를 통한 함수 생성하기
create or replace function PASSWD_ENCODE(passwd VARCHAR2) RETURN VARCHAR AS
language java name 'PasswordEncoder.encode(java.lang.String) return java.lang.String';
3. 생성한 함수를 활용.
EX)
SELECT PASSWD_ENCODE('AA') FROM DUAL;
결과 = 58BB119C35513A451D24DC20EFE9031EC85B35BFC919D263E7E5D9868909CB5