C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[3103] 인터베이스에서 UDF란....
박지훈.임프 [cbuilder] 3108 읽음    2002-01-08 09:59
잘 찍으셨네요. ^^ User Defined Function 맞습니다.

SQL문에서 쓰는 함수 있지요? 예를 들어서, MAX(), COUNT(), 이런 거 말입니다.
쿼리 쓸 때 이런 함수가 적으면 당연히 불편할텐데...
그래서 오라클이나 MS SQL같은 경우 엄청나게 많은 함수들이 있지요.

그런데 인터베이스를 설치해놓고 ISQL(오라클의 SQL-net같은 건데 더 비주얼하지요) 쿼리문에서 함수를 써보면,
COUNT(), MAX(), MIN(), SUM() 등 지원되는 함수가 10개도 안됩니다.
하다못해, 문자열 대소문자 변환 함수도, UPPER()는 있는데 LOWER()가 없습니다. 허덕~~!
인터베이스도 명색이 잘 팔아먹던, 그리고 지금도 잘 팔아먹고 있는 RDBMS인데 함수가 요것밖에 없다는게 말이
안되지 않습니까.

그래서 뒤져봤더니.. 인터베이스에서는 SQL에서 이정도만 기본 함수로 지원하고,
나머지는 UDF라는 형식의 확장같은 형태로 구현되어 있더군요.
이게 DLL(물론 윈도우 버전일 때이고, 유닉스 계열에서는 다른 형태의 바이너리지요)에서 호출하는 함수라는
것까지는 알아냈구요. 어떤 방식이든 미리 선언을 해야 쓸 수 있을 거란 것 까지는 찍었는데요.
글구 기본으로 지원되는 UDF 라이브러리가 있고, 제가 필요한 LOWER()도 포함되어 있다는 것까지 알았습니다.
문서를 잘 안뒤져보는 습성이 들어서인지 금방 못찾았던 거였습니다.

뭐 막히는 것만 있으면 툴만 실행시켜놓고 막 갈구는 버릇이 들어서인지,
IBConsol(인터베이스 관리 툴입니다)만 엄청 갈구다가 결국 방법을 못알아냈구요.
인터베이스 자료실에도 올려놓은 인터베이스 디벨로퍼 가이드를 뒤져보다가 의외로 쉽게 찾았네요.
(의외로 쉽게 찾은 이유가... 원래 인터베이스에서는 넘 기본적이고 간단한 거였으니까. -.-)

UDF는 인터베이스 SQL인 DECLARE 문으로 함수이름과 포함된 모듈 이름을 지정해서 선언해주면,
그 디비에 등록이 되더군요. 예를 들어, 위에서 제가 필요했던 LOWER() 함수같은 경우에는,
DECLARE EXTERNAL FUNCTION LOWER
CSTRING(80) CHARACTER SET NONE
RETURNS CSTRING(80) CHARACTER SET NONE FREE_IT
ENTRY_POINT 'IB_UDF_lower' MODULE_NAME 'ib_udf';
이렇게 날려주면 됩니다.
이렇게 하면 IBConsol에서 해당 디비를 열었을 때 External Functions에 함수 리스트로 나타나구요.
이후로는 SQL문에서 쓸 수 있지요.

앞에서도 말했다시피, 사용자가 직접 만드는 것 외에 인터베이스가 기본으로 지원하는 UDF 라이브러리가 있는데,
ib_udf.dll이라는 하나의 DLL로 되어 있습니다. 그외에 파이어버드에는 fbudf.dll가 더 들어있구요.
(이놈들의 소스까지 다 포함되어 있지요.)
함수 하나하나 다 선언하는 것이 귀찮으면, 해당 UDF 모듈의 모든 함수의 SQL문이 포함된 ib_udf.sql, fbudf.sql
을 열어서 몽땅 실행해버리면 한방에 등록되겠지요.

그리고 dll이니깐 당연 빌더나 델파이, 하다못해 비주얼C++에서도 만들 수 있구요.
네이티브로 함수를 만들어서 확장하는 거니까 당연 시스템 접근성이나 확장성은 짱이지만,
그만큼 잘못 만들었을 경우의 위험도 상당하겠더군요. (마치 ASP보다 ISAPI가 위험하듯이..)


어.. 쓰다보니 UDF 개론처럼 되어버렸는데... ^^
쓴 김에 마저 써보면...
지금까지 제가 인터베이스를 써보면서 느낀 인터베이스만의 장점들을 들어보면...

1. 공짜다!
  - 공개소스로 개발중인 파이어버드 1.0, 혹은 볼랜드에서 2년전에 최초로 공개했던 인터베이스 6.0
    물론 볼랜드에서 계속 개발을 계속하면서 판매중인 버전 6.5는 논외임.
2. 빠르다!
  - RDBMS로서는 엄청나게 빠릅니다. mySQL하고 한번 쌈을 시켜보고 싶은데...
    설령 mySQL이 조금쯤 더 빠르다고 하더라도 RDBMS로서의 모든 기능을 풀로 갖춘 인터베이스와는 쨉이 안될 거임
3. UDF
  - SQL 함수들을 사용자가 직접 C++, 델파이 등으로 만들 수 있으므로 확장성이나 성능 모두 짱임다.
4. embeded RDBMS
  - 인터베이스는 다른 프로그램의 설치 프로그램안에 포함시켜서 함께 설치할 수 있습니다.
    (오라클을 인스톨실드 설치 프로그램 안에 포함시킨다는 생각 해보셨슴까?)
    이걸 위해 인터베이스는 별도의 인스톨 API를 지원하네요.
5. 빌더/델파이에서 쓰기가 아주 편하다
  - 빌더/델파이에 포함되어 있는(그리고 계속 업그레이드 버전이 나오고 있는) 인터베이스익스프레스(IBX),
    이거 아주 쓸만합니다. 인터베이스 API를 네이티브로 접근하기 때문에 오버헤드도 거의 없고,
    아주 가볍습니다.
6. 아주 간편하다
  - 인터베이스 설치 프로그램이 커봤자 2~5메가 사이이기 때문에 아주 간편하지요.
    또 인터베이스는 로컬DB로 써도 충분할 정도로 빠르고 편리한데, 로컬로 쓸 때는 gds32.dll 파일 하나만
    배포하면 땡입니다. 인터베이스 디비 시스템을 함께 설치할 필요도 없지요.
7. select first.. skip..
  - 이건 MS SQL의 select top..과 비슷합니다. 셀렉트한 결과에서 상위 몇번째부터 몇개만 돌려주지요.
    이런 특성은 웹환경에서 리스팅할 때 아주 많이 사용되는데, MS-SQL에서는 "몇번째부터"라는 표현이 없구요.
    오라클에서는 ROWCOUNT 였던가를 썼었는데, 그것보다 훨씬 강력합니다.
    이건 파이어버드만 지원하는데, 최근에 출시된 상용버전인 인터베이스 6.5에서는 다른 문법으로 같은
    기능이 추가되었습니다.

장점이 아주 많지요?
불편한 점도 몇가지 있는데... 대표적인 것은, from 절에서 select의 결과를 쓰지 못한다는 겁니다.
그러니까, select ... from (select ... ) ... 이런 식은 안됩니다.
그외에도 몇가지 단점이 있었는데 기억은 잘 안나구요.

이거, 쓰다보니 또 장황하게 늘어놔버렸군요.
이걸 정리해서 담에 팁이나 하나 올릴까?

기럼...


최보현.U&I 님이 쓰신 글 :
: 유앤아이 현지아빠입니다.
:
: 증말 수고 하셨습니다. 이번 사이트 개편으로 임프님은 ... 스킬업을 하신듯 합니다 ..ㅋㅋㅋ
:
: UDF .. User Define Function 맞나요~~
:
: 개념 설명점~~ ㅋㅋ
:
: 그럼

+ -

관련 글 리스트
3099 파악된 게시판의 버그는 모두 해결되었습니다. 박지훈.임프 2535 2002/01/08
3102     [버그]report 방태윤 2492 2002/01/08
3104         Re:[버그]report 박지훈.임프 2514 2002/01/08
3105             Re:Re:[버그]report 방태윤 2630 2002/01/08
3125                 Re:Re:Re:[버그]report 박지훈.임프 2547 2002/01/09
3100     Re:수고하셨습니다. 근데 UDF 가 뭐에여 ~~ 최보현.U&I 2574 2002/01/08
3103         인터베이스에서 UDF란.... 박지훈.임프 3108 2002/01/08
3106             Re:의아 고민 되네~~MySQL 이 조은가 ... 인터베이스가 좋은가 ... 최보현.U&I 3069 2002/01/08
3101         프히히히 알면 다칩니당 (냉무) 경호 2551 2002/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.