Background Image
Java
2009.07.28 19:31

JavaSP SampleCode(Pivot기능)

조회 수 27554 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
소개: CUBRID2008에서 현재 지원하지 않는 sys_connect_by_path 함수를 java SP list, set을 이용하여 pivot 기능을 구현하는 sample code를 예제로 제공 한다.

적용 대상: CUBRID 2008 R1.1 이상, java 1.5이상

개요

현재 CUBRID2008에서 지원하지 않는 sys_connect_by_path 형식을 Java Stored Procedure list, set과 같은 collection함수를 이용하여 원하는 결과 값의 형태를 가져올 수 있도록 하는 sample code를 제공함으로써 사용 개발에 편의를 주고자 한다.

 

선행작업

CUBRID2008 Java Stored Procedure을 사용하기 위해서는 아래의 제품이 우선 설치되어 있어야한다.

1.     CUBRID2008R1.1이상 버전을 설치 - http://www.cubrid.com/zbxe/download_2008

2.     CUBRID2008 sample DB demodb 설치

3.     Java 1.5이상의 버전 - http://java.sun.com/javase/downloads/index.jsp

 

사용목적

결과 값으로 나오는 row형태의 데이터를 하나의 칼럼 형태로 보여 주는 것을 목적으로 함. 일반적으로 하나의 테이블에 동일 유형의 값이 들어 있고 이를 하나의 값의 형태로 보고자 할 때 사용됩니다.

 

사용예시

demodb는 역대 올림픽의 기록에 대한 정보를 가지고 있다. 여러 테이블 중 ‘game’ 테이블을 선택하여 사용할 것이다.

요구사항

‘game’테이블에서 1988년 올림픽(host_year=1988)에서 금메달(medal=’G’)을 획득한 나라(nation_code)를 중복 값을 제외하여 구하되 하나의 칼럼으로 ‘-‘구분자를 사용하여 결과 값을 나타내어라.

테이블 정보(game)

     host_year            INTEGER NOT NULL

     event_code           INTEGER NOT NULL

     athlete_code         INTEGER NOT NULL

     stadium_code         INTEGER NOT NULL

     nation_code          CHARACTER(3)

     medal                CHARACTER(1)

     game_date            DATE

요구사항에 대한 row단위 결과 쿼리 및 결과 값

select distinct(nation_code) from game where medal='G' and host_year=1988;

=== <Result of SELECT Command in Line 1> ===

  nation_code

======================

  'AUS'

  'AUT'

  ...

  ‘USA'

  'YUG'

31 rows selected.

Current transaction has been committed.

Java Stored Procedure 코드

public class Pivot {

    public static String medal_f(String[] arry,String str) throws Exception {

      String temp = "";

      for(int i=0 ; i < arry.length ; i++)

                         temp += arry[i] + str;

      if(arry.length != 0)

                         temp = temp.substring(0,temp.length()-str.length());

     

        return temp;

    }

}

생성 class load작업

$javac Pivot.java

$loadjava demodb Pivot.class

-- demodb 데이터 파일 위치에 java디렉토리 생성여부를 확인하고 해당 디렉토리에 Pivot.class가 있는지 확인한다.

function등록 작업

csql> create function medal_f(arry list, str string) return varchar as language JAVA NAME 'Pivot.medal_f(java.lang.String[],java.lang.String) return String';

csql> ;x

Current transaction has been committed.

1 command(s) successfully processed..

String배열형태의 값은 list set을 이용하여 값을 받을 수 있다. 위와 같이 create function 문의 medal_f함수에 인수 값의 형태로 list를 설정하여 function을 생성할 수 있다.

 

사용방법

위의 순서에 의해 medal_c라는 function이 등록 되었다. 이를 이용하여 요구사항 대로 ‘-‘로 구분하여 하나의 칼럼으로 결과 값을 가져온다.

사용쿼리

select medal_f(

list(select distinct(nation_code)

from game where medal='G' and host_year=1988),'-') as NATIOM

from db_root;

// row단위의 결과 값을 list(sequence)타입으로 받아 온 후 해당 값을 medal_f함수에 넣어 결과 값을 가져온다.

// list대신 sequence타입을 사용해도 동일하다. set을 사용할 경우 distinct가 필요 없다.

결과값

=== <Result of SELECT Command in Line 1> ===

  NATIOM

======================

  'AUS-AUT-BEL-BRA-BUL-CAN-CHN-DEN-ESP-FIN-FRA-FRG-GBR-GDR-HUN-ITA-JPN-KEN-KOR-MAR-NED-NOR-NZL-POL-POR-ROU-SUR-TCH-URS-USA-YUG'

1 rows selected.

Current transaction has been committed.

1 command(s) successfully processed.

결론

위의 스크립트와 사용방법을 참조하여, 변형 추가 하여 위 같은 형식의 데이터 출력을 원할 시 유용하게 사용할 수 있다. 중복 값이 없는 경우는 list sequence를 권장하며, 중복 값이 있는 경우 제거가 필요하다면 set을 사용할 것을 권장한다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
66 Windows CUBRID2008R2.0 Windows BACKUP 자동화 설정하기 정만영 2009.08.17 27942
65 Linux CUBRID2008R1.x to 2.0 마이그레이션 가이드 (32bit 기준) 정만영 2009.08.17 27205
64 기타 CUBRID2008 쿼리 작성예제 cubebridge 2009.07.28 24905
63 기타 CUBRID2008 실행계획 분석하기 file cubebridge 2009.07.28 15339
62 Install CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법 남재우 2010.01.28 27348
61 기타 CUBRID2008 R2.0 실행계획 분석하기 file cubebridge 2009.08.27 21917
60 Windows CUBRID2008 R2.0 Tutorial (Windows) cubebridge 2009.08.17 27340
59 기타 CUBRID 활용 - 질의 튜닝 사례 중심 file cubrid 2010.12.02 45962
58 기타 CUBRID 주요 명령 요약 정리 정만영 2009.08.17 17187
57 Install CUBRID 에 텍스트큐브 설치하기 file inureyes 2009.12.31 29852
56 기타 CUBRID 스캔 이해하기 손승일 2009.08.15 15116
55 튜닝 CUBRID 세미나 자료(개요 및 SQL 활용) file admin 2011.07.14 22771
54 Install CUBRID 설치 안내 - LINUX 남재우 2011.03.08 30414
53 Install CUBRID 설치 및 매니저 구동하기(CUBRID 2008 R2.0) CUBRID_DEV 2009.08.18 30054
52 Install CUBRID 설치 및 매니저 구동하기(CUBRID 2008 R1.x) CUBRID_DEV 2009.07.18 31532
51 Linux CUBRID 사용 포트와 iptables(방화벽) 설정 정만영 2010.03.01 38341
50 기타 CUBRID 볼륨 공간 재사용률 비교 - 2008 R3.1 vs. 2008 R4.0 file admin 2011.07.14 16555
49 Linux CUBRID 복제 설계 가이드 file 정만영 2010.03.03 25139
48 기타 CUBRID 복제 구성하기 - 단일 서버에 구성 방법 포함 남재우 2010.03.08 30004
47 기타 CUBRID 매니저 R3.1에서 웹호스팅 서버의 CUBRID R2.1 접속하는 방법 (큐브리드 매니저에서 다른 버전의 큐브리드 서버 접속 방법) file admin 2011.07.14 31508
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales