자바개발자로 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
'4. Database > 4_1 쿼리_Func_Proc' 카테고리의 다른 글
[Oracle] 핸드폰번호 마스킹(휴대폰번호 마스킹) (2) | 2020.06.16 |
---|---|
[Oracle] Oracle 달력 만들기 및 날짜 쿼리 활용하기 (1) | 2020.04.15 |
[Oracle] 오라클에서 Java를 이용하여 함수 만들기 (샘플) (0) | 2017.11.30 |
[Oracle] 사업자번호 유효성 체크 Function (오라클) (0) | 2017.11.29 |
댓글0