본문 바로가기
일하는 중에

오라클에서 Java를 이용한 function 만들기

by likebnb 2010. 7. 28.

오라클 얘기를 또 한 번 하려고 한다. 모든 프로그램이 다 그런 것은 아니지만 대체로 데이터베이스와 연계하는 프로그램이 많은 편이다.
그러므로 개발자에겐 프로그래밍을 위한 언어 뿐 아니라 오라클과 같은 데이터베이스와 의사소통을 할 수 있는 SQL[각주:1]를 익히는 것도 필수
처럼 여겨진다. 아니 여겨지는 것이 아니라 필수라고 얘기하는 것이 더 바람직하겠다.

아닌게 아니라 SQL을 잘 다루면 상당 부분 프로그램의 코드가 절약되는 효과도 있으며 어느 정도 분산처리의 효과도 볼 수 있는 것이
사실이다. 단, 데이터베이스 서버와 어플리케이션 서버가 서로 독립적으로 운영된다면 말이다.

자, 이제 본론으로 들어가 보자. SQL에 일부 로직을 맡기면 좋다는 얘기에 대해서 따로 부연 설명을 하진 않겠다. 문제는 그러면
좋다는 것을 알고는 있지만, 기본적으로 SQL에서 지원하지 않는 로직(기능)을 구현해야 할 때이다. 이럴 땐 어떻게 해야 할까?
오늘 하고자 하는 얘기가 바로 SQL에 없는 기능을 자바 프로그램 소스를 활용해서 SQL에서 사용할 수 있도록 하는 방법에 대한 것이다.



1. 자바 소스를 이용해서 오라클 내장 자바 클래스 만들기

일반적으로 오라클의 내장 객체를 생성할 때 사용하는 구문과 별반 다를 게 없다. create or replace는 충분히 익숙하지
아니한가! 여기에 하나만 더 하면 된다. 바로 and compile java source named 이다. 당연한 얘기지만 as 이후엔 자바 소스가
따라 오면 된다. 그리고 자바 프로그램이 끝난 다음에 내장객체 생성을 지시하는 "/"를 붙여 주면 끝이다.


생성구문

create or replace and compile java source named "ClassName" as


아래 그림에서 예제로 만들어 본 것은 주어진 문자열을 BASE64Encoder를 이용해서 암호화된 문자열로 반환해주는 자바 프로그램이다.








2. 만들어진 자바 객체를 이용해서 오라클 함수 선언하기

오라클의 함수 선언과 같다. 다만 끝에 as LANGUAGE JAVA NAME 등의 구문이 하나 더 따라 붙는다. 맨 마지막에 인용부호 안에
씌여진 것은 앞서 자바 소스에서 선언한 패키지명과 클래스명을 포함한 자바 실행 객체의 전체 경로명과 돌려주는 결과값의
자료형을 명시해 주면 된다.

생성구문
create or replace function FunctionName(parameter) return DataType
as LANGUAGE JAVA NAME 'class.method(param) return DataType'

구체적인 예는 아래 그림의 예시를 참고하도록 하자.







3. 생성된 자바함수, 이제 오라클의 내장함수가 되었다.

위와 같은 과정을 거쳐서 만들어진 자바 기반의 함수는 이제 오라클의 내장함수와 그 사용방법이 동일하다. 그러므로 DML에서
자유롭게 사용할 수 있다는 말이다.


 




  1. SQL : Structured Query Language의 약어로 프로그래머들에겐 주로 SELECT, UPDATE, INSERT, DELETE 등의 구문이 익숙할 것이다. SQL을 다시 세분화하면 DDL, DML, DCL 등으로 구분할 수 있는데 앞서 얘기한 SELECT 등은 DML에 해당한다. [본문으로]