2008-03-12

아파치 더비에서 자바 함수 만들기

아파치 더비에서 자바 클래스 메소드를 SQL 함수로 사용하는 방법이다.

* 아파치 더비는 자바로 개발된 DBMS이다.


1. 자바 클래스 작성

SQL 함수로 사용하려면 메소드를 public static으로 만들어야 한다. NameUtil 클래스의 toId와 toAlias 메소드처럼...

package com.dimdol.example;

import java.util.HashMap;
import java.util.Map;

public final class NameUtil {

  private static Map ids = new HashMap();

  private static Map alias = new HashMap();

  private AgentUtil() {
    // ids와 alias 초기화
  }

  public static String toId(String key) {
      String result = (String) alias.get(key);
      return result == null ? key : result;
  }

  public static String toAlias(String key) {
    String result = (String) ids.get(key);
    return result == null ? key : result;
  }

}


2. SQL 함수 선언

다음 쿼리로 NameUtil.toId 메소드로 TO_ID 함수를 만든다.

CREATE FUNCTION TO_ID(ALIAS VARCHAR(100)) RETURNS VARCHAR(100) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
EXTERNAL NAME 'com.dimdol.example.NameUtil.toId'

다음 쿼리로는 NameUtil.toAlias 메소드로 TO_ALIAS 함수를 만든다.

CREATE FUNCTION TO_ALIAS(ID VARCHAR(100)) RETURNS VARCHAR(100) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
EXTERNAL NAME 'com.dimdol.example.NameUtil.toAlias'


3. 사용 방법

이렇게 작성한 SQL 함수를 아래와 같이 사용한다. 일반 SQL 함수와 사용 방법이 다르지 않다.

SELECT TO_ALIAS(ID)
   FROM EMPLOYEE
 WHERE ID = TO_ID('딤돌')