Oracle - Calling Java Methods in Oracle Database (오라클에서 자바 호출하기)

in #kr-dev9 years ago

안녕하세요 @flyyou입니다.

오늘의 포스트는 오라클에서 자바 Method를 호출하는 방법에 대해서 공유드리고자 합니다.

요즘 개인정보 암호화로 문제가 많이 되고 있는데요

개인정보를 암호화 하기 위해서 저희는 오라클 내부 프로시저에서 자바로 된 SHA 암호화 Method를 호출하여서 암호를 하고 있습니다.

아래와 같이 FUNCTION을 만들어서 사용하시면 됩니다.

자 그러면 이렇게 오라클에서 자바 Method를 호출하려면 어떻게 해야 할까요?

우선 자바 Class를 만듭니다. (예를 위해서 Hello world를 예로 설명드릴께요)
파일명은 Hello.java가 되겠습니다.

public class Hello
{
  public static String world()
  {
    return "Hello world";
  }
}

해당 자바 파일을 컴파일을 합니다.

javac Hello.java

컴파일을 하기 위해서는 컴파일 하는 기기에 CLASSPATH가 설정이 되어 있어야만 해당 java파일을 찾을 수가 있습니다.
(CLASSPATH 설정은 구글링에 자료가 넘처나니 이번엔 SKIP하겠습니다.)

다음으로 어떤 자바스키마로 로딩을 할 지 결정을 합니다. 예를 위해서 scott 스키마의 자바 오브젝트로 로딩하도록 하겠습니다.

loadjava명령을 이용해서 자바 오브젝트를 로딩합니다.

loadjava -user scott/tiger Hello.class

Hello.class는 오라클에 로딩되었습니다.
다음으로 해당 클래스를 호출하는 FUNCTION을 만들어야 합니다.

SQL> CONNECT scott/tiger
connected
SQL> CREATE OR REPLACE FUNCTION helloworld RETURN VARCHAR2 AS
  2  LANGUAGE JAVA NAME 'Hello.world () return java.lang.String';
  3  /
Function created.

Hello.class를 호출하는 FUNCTION까지 만들었으면 해당 FUNCTION을 호출해 보면 알 수 있겠지요?
제대로 되었는지 한번 봐볼까요???

SQL> VARIABLE myString VARCHAR2(20);
SQL> CALL helloworld() INTO :myString;
Call completed.
SQL> PRINT myString;

MYSTRING
---------------------------------------
Hello world

여기에서 :myString은 OUT파라미터입니다.

위의 Hello.class를 보면 "Hello world"를 리턴하는 단순한 클래스입니다.
이 리턴값을 FUNCTION에서는 java.lang.String 이라는 타입으로 리턴을 합니다.

호출하는 예를 보면 CALL helloworld() INTO :myString 이라고 되어있는데
"Hello world"라는 String 값을 myString에 넣어 두게 됩니다.

그리고 마지막으로 PRINT myString을 하게되면 OUT파라미터인 myString에 담겨저 있던 값이 출력이 되는 것입니다.

간혹가다 오라클에서 SQL이나 PL/SQL만으로는 구현하기 힘든 로직들이 있습니다.
그런 경우에 대해서 JAVA로 클래스를 만들어서 호출하면 편합니다.

Sort:  

실제 사용될 정도라면 퍼포먼스 이슈는 별로 없나보네요. 예전에 학생때 이런게 있다라고 하고 넘어갔었는데 실무에서 활용되기도하는군요! ㅎㅎ

퍼포먼스 이슈는 없습니다. WAS서버에서 호출하는 거와 DB서버에서 호출하는 거와 별반 차이가 없으니깐요 실무에서 유용하게 잘 사용되고 있습니다. 댓글 감사합니다.

확실히 IT 코인과 접목된 스팀잇인만큼 IT쪽에 근무하시는 분들이 많은 것 같아요! 좋은 정보 감사드립니다 :)

네 그런듯 싶습니다. 근데 워낙 뛰어나신 분들이 많아서 저는 명함도 못내밀어요 ㅋ 즐거운 하루 뒤세요

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.080
BTC 60288.06
ETH 1572.33
USDT 1.00
SBD 0.47