본문 바로가기
4. Database/4_1 쿼리_Func_Proc

[Oracle] 오라클에서 Java를 이용하여 함수 만들기 (샘플)

by 갓대희 2017. 11. 30.
반응형



자바개발자로 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



반응형

댓글0