자바 원하는 오라클 함수를..(Java Stored Procedures or Functions)

|

승용이가 오라클 프로시저, 함수 공부하면서 오라클의 substr()함수와 같은 기능을 하는 함수를 기존 함수를 사용하지 않고 만드는 방법을 물어본건데...다른 방법으로는 죽어도 모르겠고(혹시 아시는 분 여기에 좀 올려주세요)...오라클에서 자바로 구현이 가능(자바말고. pro c등 기타언어로도 가능하지만..우리가 자바개발자인고로..)하기에 이렇게 만드는 방법을 올립니다. 개발시 참고바랍니다.

 

Java Stored Procedures or Functions

 

오라클에서 사용자 정의 함수나 프로시저를 만드는 것은 우리같은 자바 개발자에겐 조금 짜증나는 작업이다. 만약, 자바로 함수를 간단하게 만들 수 있다면...당근 가능하다...^^...

비즈니스단이나 뷰어단에서 해야할 일을 DB단이 처리함으로써 응용프로그램이나 미들웨어에 작업하는 것보다 빠른 속도를 얻으면서 간단하고 쉽게 제작 사용할 수 있을 것이다.

 

자바를 이용한 오라클 함수를 만드는 방법을 예제와 함께 정리했으니 따라하며 이해하시길...

 

예제) 오라클의 substr()함수과 같은 자바클래스를 이용한 사용자 정의 함수 작성 방법

 

1. Java 클래스 제작(Writing the Java Classes)

데이터베이스의 테이블들을 생성한 후, 어떠한 기능(메서드)들이 구현되어져야 하는지
생각하고 기능들을 메서드로서 구현한다. 

import java.sql.*;
import java.io.*;

public class SubStr_ex
{
  public static String cutString(String str_in, int start_no, int cut_no)
  {
      cut_no = start_no + cut_no - 1;
      char[] tmp = str_in.toCharArray();
      String out_str = "";
      if(cut_no>str_in.length()) cut_no = str_in.length();
      for(int i=1;i<=str_in.length();i++){
         if(i>= start_no && i <= cut_no){
           out_str = out_str+tmp[i-1];
         }
      }
      return out_str;
   }
}

 

2. 자바클래스 오라클에 올리기(Loading the Java Classes)
자바클래스를 작성한 후 loadjava라는 오라클의 유틸리티를 이용하여 cmd창에서 다음과 같이
올려준다

  D:\>loadjava -u scott/tiger@127.0.0.1:1521:ora -v -r -t SubStr_ex.java
  arguments: '-u' 'scott/tiger@127.0.0.1:1521:ora' '-v' '-r' '-t' 'SubStr_ex.java'

  creating : source SubStr_ex
  loading  : source SubStr_ex
  resolving: source SubStr_ex

 

<옵션>
-v : verbose모드 옵션
-r : 컴파일하고 클래스안에 외부참조를 포함한다는 옵션
-t : 클라이언트 측 JDBC Thin 드라이버를 이용해서 데이터베이스에 연결한다는 옵션


3. load된 자바클래스를 이용한 오라클 함수 만들기(Publishing the Java Classes)
자바클래스를 올렸으면 이제 오라클 함수를 만들어 사용하자
sqlplus창에서 아래와 같이 실행하자


CREATE OR REPLACE FUNCTION SubStr_ex(str_in VARCHAR2, sn NUMBER, en NUMBER)
   RETURN VARCHAR2
AS
   LANGUAGE JAVA
   NAME 'SubStr_ex.cutString(java.lang.String, int, int) return java.lang.String';
/


그러면 substr_ex()라는 사용자 함수가 생성되어져 있을 것이다.

 

4. 이제부터는 맘대로 사용....(Calling the Java Stored Procedures or Functions)

SQL> select substr_ex('asdfghhj',3,2) from dual;

SUBSTR_EX('ASDFGHHJ',3,2)
-------------------------------------------------------------------------------

df

 

더 많은 정보는

http://download-west.oracle.com/docs/cd/B19306_01/java.102/b14187/cheight.htm#CHDCCHID

이곳을 참고 바랍니다.

 

그리고..오라클과 자바...타입 매핑

Table 6-1 Legal Data Type Mappings

SQL Type Java Class
CHAR, LONG, VARCHAR2 oracle.sql.CHAR

java.lang.String

java.sql.Date

java.sql.Time

java.sql.Timestamp

java.lang.Byte

java.lang.Short

java.lang.Integer

java.lang.Long

java.lang.Float

java.lang.Double

java.math.BigDecimal

byte, short, int, long, float, double

DATE oracle.sql.DATE

java.sql.Date

java.sql.Time

java.sql.Timestamp

java.lang.String

NUMBER oracle.sql.NUMBER

java.lang.Byte

java.lang.Short

java.lang.Integer

java.lang.Long

java.lang.Float

java.lang.Double

java.math.BigDecimal

byte, short, int, long, float, double

OPAQUE oracle.sql.OPAQUE
RAW, LONG RAW oracle.sql.RAW

byte[]

ROWID oracle.sql.CHAR

oracle.sql.ROWID

java.lang.String

BFILE oracle.sql.BFILE
BLOB oracle.sql.BLOB

oracle.jdbc2.Blob

CLOB, NCLOB oracle.sql.CLOB

oracle.jdbc2.Clob

OBJECT

Object types

oracle.sql.STRUCT

java.sql.Struct

java.sql.SqlData

oracle.sql.ORAData

REF

Reference types

oracle.sql.REF

java.sql.Ref

oracle.sql.ORAData

TABLE, VARRAY

Nested table types and VARRAY types

oracle.sql.ARRAY

java.sql.Array

oracle.sql.ORAData

any of the preceding SQL types oracle.sql.CustomDatum

oracle.sql.Datum

 

2006.4.27 / 무찬아빠(naeodud@nate.com)

And